快轉到主要內容
  1. LeetCode/

LeetCode 496: Next Greater Element I

·1 分鐘· ·
LeetCode Daily Easy Array Stack Monotonic-Stack Hash Map Next Greater Element
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: easy 第一次嘗試: 2025-08-09

  • 總花費時間:00:00.00

解題思路
#

用單調遞減堆疊遍歷 nums2。當前數字大於堆疊頂端時,彈出頂端並將當前數字記為該值的「下一個更大元素」。如此即可預先建立「值 → 下一個更大元素」的映射,回答 nums1 中每個值的查詢。

解法
#

  • 維持 nums2 的遞減堆疊。
  • 針對 nums2 的每個 num
    • 當堆疊非空且 stack[-1] < num,彈出 top 並設定 map_[top] = num
    • num 推入堆疊。
  • 最後對 nums1 每個值回傳 map_.get(value, -1)
class Solution:
    def nextGreaterElement(self, nums1: List[int], nums2: List[int]) -> List[int]:

        stack = []
        map_ = {}

        for num in nums2:
            while stack and stack[-1] < num:
                value = stack.pop()
                map_[value] = num

            stack.append(num)

        return [map_.get(num, -1) for num in nums1]

複雜度
#

  • 時間:O(n + m),其中 n = len(nums2),m = len(nums1)
  • 空間:O(n),用於堆疊與映射

收穫
#

  • 單調遞減堆疊確保每個元素最多被推入/彈出一次,時間為線性。
  • 本題 nums2 元素皆唯一,因此可用「值」作為映射鍵,不會產生歧義。
  • 對於無更大元素者,透過 get(..., -1) 自然回傳 -1

遇到的問題
#

  • 構建對照表時混淆「索引」與「值」,容易查不到或查錯。
  • 若元素不唯一,使用「值」作為鍵會產生歧義;本題由於唯一性避免了此問題。
  • 不需特別清空堆疊:剩餘在堆疊中的值確實沒有更大元素,對應 -1

相關文章

LeetCode 1497: Check If Array Pairs Are Divisible by k
·1 分鐘
LeetCode Daily Medium Array Hash Map Modulo Math Counting Complement
餘數配對與雜湊表;特別處理 0 與 k/2 的餘數。
LeetCode 503: Next Greater Element II(單調棧)
·1 分鐘
LeetCode Daily Medium Monotonic-Stack Stack Array Circular-Array 單調棧 環狀陣列
單調棧、環狀陣列
LeetCode 1695: Maximum Erasure Value (Sliding Window)
·1 分鐘
LeetCode Daily Medium Sliding Window Two Pointers Array Hashset
LeetCode 解題紀錄
LeetCode 209: Minimum Size Subarray Sum
·1 分鐘
LeetCode Daily Medium Array Sliding Window Two Pointers Prefix Sum Binary-Search
滑動視窗與雙指針,最小化子陣列長度(總和 ≥ target)。
LeetCode 3439: Reschedule Meetings for Maximum Free Time (Sliding Window)
·2 分鐘
LeetCode Daily Medium Sliding Window Two Pointers Intervals Array
LeetCode 解題紀錄
LeetCode 1071: Greatest Common Divisor of Strings
·1 分鐘
LeetCode Daily Easy 字串 數學 GCD
LeetCode 解題紀錄