栈

最小栈

中等#155Java时间 每个操作 O(1)空间 O(n)

题目要做什么

设计支持 push、pop、top 和 getMin 的栈,每个操作都为 O(1)。弹出和读取操作只允许用于非空栈。

题目示例输入ops = ["MinStack","push","push","push","getMin","pop","top","getMin"], args = [[],[-2],[0],[-3],[],[],[],[]]
题目示例输出[null,null,null,null,-3,null,0,-2]

01 为什么这样做

主栈保存元素,辅助栈在相同深度保存截至该深度的最小值。入栈时同步记录最小值,出栈时同步移除,因此不用重新扫描。

始终成立的条件

两个栈始终等高,辅助栈顶是主栈当前所有元素的最小值。

02 看见算法执行

动画与代码同步

修改输入,播放自己的例子

当前使用题目示例
修改输入会改变执行过程;预期输出用于核对结果。
数组 / nums步骤 1
执行状态
本次演示输出播放到最后查看

Solution.java参考解法
1class MinStack {2    private final Deque<Integer> values = new ArrayDeque<>();3    private final Deque<Integer> minimums = new ArrayDeque<>();4    public void push(int val) {5        values.push(val);6        minimums.push(minimums.isEmpty() ? val : Math.min(val, minimums.peek()));7    }8    public void pop() {9        values.pop();10        minimums.pop();11    }12    public int top() {13        return values.peek();14    }15    public int getMin() {16        return minimums.peek();17    }18}

键盘控制:A 后退 · D 前进

编程练习

↑↓ 选择↵ 打开Pagefind 全文检索