序
本文次要记录一下leetcode栈之最小栈
题目
设计一个反对 push ,pop ,top 操作,并能在常数工夫内检索到最小元素的栈。 push(x) —— 将元素 x 推入栈中。 pop() —— 删除栈顶的元素。 top() —— 获取栈顶元素。 getMin() —— 检索栈中的最小元素。 示例:输出:["MinStack","push","push","push","getMin","pop","top","getMin"][[],[-2],[0],[-3],[],[],[],[]]输入:[null,null,null,null,-3,null,0,-2]解释:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.getMin(); --> 返回 -3.minStack.pop();minStack.top(); --> 返回 0.minStack.getMin(); --> 返回 -2. 提醒: pop、top 和 getMin 操作总是在 非空栈 上调用。起源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/min-stack著作权归领扣网络所有。商业转载请分割官网受权,非商业转载请注明出处。
题解
class MinStack { private int min = Integer.MAX_VALUE; private Stack<Integer> stack; /** initialize your data structure here. */ public MinStack() { stack = new Stack<>(); } public void push(int x) { if (x <= min) { stack.push(min); min = x; } stack.push(x); } public void pop() { if (stack.pop() == min) { min = stack.pop(); } } public int top() { return stack.peek(); } public int getMin() { return min; }}/** * Your MinStack object will be instantiated and called as such: * MinStack obj = new MinStack(); * obj.push(x); * obj.pop(); * int param_3 = obj.top(); * int param_4 = obj.getMin(); */
小结
这里再push的时候,计算了min值,同时再min值有更新的时候,先push了上一个min值,最初再push以后的min值;在pop的时候,判断是否等于min值,等于的话,再pop一次,更新以后min值为上一个min值,这里这样子实现是基于题目的假如(pop、top 和 getMin 操作总是在 非空栈 上调用
)以及MinStack的调用程序。
doc
- 最小栈