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

LeetCode 3912: Valid Elements in an Array

·1 分鐘· ·
LeetCode Easy Array
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: easy 第一次嘗試:2026-04-26

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

解題思路
#

「嚴格大於左邊所有元素」等於「嚴格大於左邊的最大值」(Array 模板三)。左往右掃一次標記比前綴最大值大的,右往左掃一次標記比後綴最大值大的,兩者有一個成立就留下。第一個和最後一個元素在對應方向上沒有比較對象,自然會被標記。

我的解法
#

class Solution:
    def findValidElements(self, nums: List[int]) -> List[int]:
        n = len(nums)
        valid = [False] * n
        best = float("-inf")
        for i in range(n):
            if nums[i] > best:
                valid[i] = True
            best = max(best, nums[i])
        best = float("-inf")
        for i in range(n - 1, -1, -1):
            if nums[i] > best:
                valid[i] = True
            best = max(best, nums[i])
        return [x for x, ok in zip(nums, valid) if ok]

我當時把合格的 index 放進集合,最後排序 index 再輸出;用布林陣列就不用排序。

複雜度
#

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

要特別避免的錯誤
#

  • 是「嚴格」大於,跟最大值相等不算。
  • 輸出要照原本的順序,而且同一個元素不能輸出兩次。

面試口說整理
#

比左邊全部都大等於比前綴最大值大,所以我左往右、右往左各掃一次標記合格的元素,最後照原順序輸出。時間 O(n)。

相關文章

LeetCode 3903: Smallest Stable Index I
·1 分鐘
LeetCode Easy Prefix-Sum Array
LeetCode 3903 解題筆記:前綴最大值減後綴最小值 <= k 的第一個 index;後綴最小值先從右往左建好
LeetCode 3898: Find the Degree of Each Vertex
·1 分鐘
LeetCode Easy Graph Matrix Array
LeetCode 3898 解題筆記:鄰接矩陣第 i 列的 1 的個數就是頂點 i 的度數
LeetCode 3838: Weighted Word Mapping
·1 分鐘
LeetCode Easy Array String Simulation
LeetCode 3838 解題筆記:每個字的權重加總取 mod 26,再反向對應字母:0 -> z,也就是 chr(ord(‘z’) - r)
LeetCode 3379: Transformed Array
·1 分鐘
LeetCode Easy Array Simulation
LeetCode 3379 解題筆記:往右或往左走 nums[i] 步都可以寫成 nums[(i + nums[i]) % n];Python 的 % 對負數也回傳非負值
LeetCode 2540: Minimum Common Value
·1 分鐘
LeetCode Easy Two-Pointers Array
LeetCode 2540 解題筆記:兩個排序好的陣列各一個指針,比較小的那邊往前,第一次相等就是答案
LeetCode 2570: Merge Two 2D Arrays by Summing Values
·1 分鐘
LeetCode Easy Two-Pointers Array
LeetCode 2570 解題筆記:兩個依 id 排序的陣列,用合併兩個有序序列的雙指針,id 相同就相加