题目定位
单调栈逻辑和普通版本几乎一样,只是要通过两轮扫描模拟环形回绕。
关键观察
第二轮遍历的作用只是帮助第一轮没找到答案的元素完成匹配。
目标复杂度
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 次就足够?
哪些索引应该只压栈一次?
继续刷相关题
先把 单调栈 这个模式刷成体系,再去做更难变体。