↓快轉到主要內容
  1. LeetCode/

LeetCode 3828: Final Element After Subarray Deletions

·1 分鐘· ·
LeetCode Medium Math Brainteaser Game-Theory Array
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: medium 第一次嘗試:2026-02-01

  • 提交紀錄:Accepted(一次通過)

解題思路
#

每一步可以刪掉長度 < m 的任何子陣列(m 是目前的長度),所以可以一次刪到只剩一個,只要剩下的是頭或尾(刪掉長度 m - 1 的子陣列)。

  • 下界:Alice 第一步直接刪到只剩 nums[0] 或 nums[-1],選大的,遊戲結束。答案至少是 max(頭, 尾)。
  • 上界:如果 Alice 第一步沒有結束遊戲,她刪掉的是一段連續的子陣列,不可能同時刪掉頭和尾,所以新陣列至少有一端還是原本的頭或尾。Bob 接著刪到只剩新陣列的頭或尾中比較小的那個,結果 <= 那個原本的端點 <= max(頭, 尾)。

所以答案剛好是 max(nums[0], nums[-1])。

我的解法
#

class Solution:
    def finalElement(self, nums: List[int]) -> int:
        return max(nums[0], nums[-1])

複雜度
#

時間 O(1),空間 O(1)。

要特別避免的錯誤
#

  • 以為要模擬整個遊戲:觀察出「一步就能留下頭或尾」之後就是常數時間。

面試口說整理
#

每一步都可以刪到只剩頭或尾。Alice 第一步就這麼做,至少拿到頭尾比較大的那個;如果她不這麼做,她只刪了一段,新陣列至少保留一個原本的端點,Bob 就刪到只剩新的頭尾裡比較小的,不會超過原本頭尾的最大值。所以答案是 max(頭, 尾)。

相關文章

LeetCode 3627: Maximum Median Sum of Subsequences of Size 3
·1 分鐘
LeetCode Medium Math Greedy Sorting Game-Theory Array
LeetCode 3627 解題筆記:排序後每次拿最大的兩個和最小的一個,中位數是第二大的;答案是從尾端往前每隔一個取,共 n / 3 個
LeetCode 1040: Moving Stones Until Consecutive II
·1 分鐘
LeetCode Medium Sliding-Window Math Sorting Array
LeetCode 1040 解題筆記:最多步數 = 總空位 − 第一步會浪費掉的那一邊空隙;最少步數用長度 n 的視窗找最多石頭,n - 1 顆已連續、剩一顆在遠處時要特判成 2
LeetCode 3649: Number of Perfect Pairs
·1 分鐘
LeetCode Medium Two-Pointers Math Sorting Array
LeetCode 3649 解題筆記:把條件化簡成「較大的絕對值 <= 2 × 較小的絕對值」,排序絕對值後用雙指針計數
LeetCode 2745: Construct the Longest New String
·1 分鐘
LeetCode Medium Dynamic-Programming Math Greedy Brainteaser
LeetCode 2745 解題筆記:AA 和 BB 必須交替出現,最多用 min(x, y) 對,多的那種還能再多放一個;AB 全部都能接上
LeetCode 3618: Split Array by Prime Indices
·1 分鐘
LeetCode Medium Math Number-Theory Sieve Array
LeetCode 3618 解題筆記:判斷的是 index 是不是質數;用埃氏篩一次算出 0..n-1 哪些是質數,比每個 index 試除快
LeetCode 292: Nim Game
·1 分鐘
LeetCode Easy Math Brainteaser Minimax-Algorithm Game-Theory
LeetCode 292 解題筆記:剩 4 的倍數顆石頭的人必輸,所以 n % 4 != 0 時先手贏