#503
Medium
单调栈

Next Greater Element II

在环形数组中找每个元素的下一个更大元素。

ArrayMonotonic Stack

题目定位

单调栈逻辑和普通版本几乎一样,只是要通过两轮扫描模拟环形回绕。

关键观察

第二轮遍历的作用只是帮助第一轮没找到答案的元素完成匹配。

目标复杂度

O(n) / O(n)

这题的解法思路怎么拆

1

单调栈逻辑和普通版本几乎一样,只是要通过两轮扫描模拟环形回绕。

2

第二轮遍历的作用只是帮助第一轮没找到答案的元素完成匹配。

3

先明确栈维护的是哪种“尚未解决”的关系。

4

只要单调性不被破坏,就持续压栈。

参考实现

Python
# Generic pattern template
stack = []
for i, value in enumerate(nums):
    while stack and nums[stack[-1]] < value:
        prev_index = stack.pop()
        # value is the next greater for prev_index
    stack.append(i)

常见坑点

warning

第二轮还把索引重新压栈,导致重复逻辑混乱。

warning

忘了本来就可能有元素没有更大值,答案应保持 -1。

高频追问

为什么遍历 2n 次就足够?

哪些索引应该只压栈一次?

继续刷相关题

先把 单调栈 这个模式刷成体系,再去做更难变体。

view_week回到模式页
LeetCode 503. Next Greater Element II 题解思路 | Interview AiBox