#155
Medium
单调栈

Min Stack

设计一个能在 O(1) 返回最小值的栈。

StackDesign

题目定位

最直接的解法是再维护一个最小值栈,这能提醒你:很多栈题的关键其实是“顺手保留结构化历史信息”。

关键观察

每次 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) 取最大值呢?

继续刷相关题

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

view_week回到模式页
LeetCode 155. Min Stack 题解思路 | Interview AiBox