本文次要记录一下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

  • 最小栈