题目定位
最直接的解法是再维护一个最小值栈,这能提醒你:很多栈题的关键其实是“顺手保留结构化历史信息”。
关键观察
每次 push 都要同步记录当前深度对应的最小值。
目标复杂度
O(1) / O(n)
这题的解法思路怎么拆
1
最直接的解法是再维护一个最小值栈,这能提醒你:很多栈题的关键其实是“顺手保留结构化历史信息”。
2
每次 push 都要同步记录当前深度对应的最小值。
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
只有变小才压 min,结果重复最小值场景出错。
warning
pop 后再重新遍历求最小值。
高频追问
如果要压缩重复最小值,能怎么做?
如果还要同时支持 O(1) 取最大值呢?
继续刷相关题
先把 单调栈 这个模式刷成体系,再去做更难变体。