155. Min Stack

/*
 * 155. Min Stack
 * 12.10 by Mingyang
 * 自行设计Stack,这种类型的题目一定要两个Stack同步来解
 * 这个题目自己想的时候一开始写错了,以为这个stack每次弹出来的是由小到大的顺序,
 * 然后实际上发现才是还是按照stack的顺序弹出,只是每次需要随时保存最小的值
 * 这里面有个技巧,当minstack为空的时候,自然push进去了。但是如果里面有值
 * 需要把这个值和x比较,小的push进去,这样如果那个值更小,会被push进去两次
 * 这么做的目的就是pop的时候可以同时pop两个出来
 */
class MinStack {
    private Stack<Integer> stack;
    private Stack<Integer> minStack;
    public MinStack(){
        stack=new Stack<Integer>();
        minStack=new Stack<Integer>();
    }
    public void push(int x) {
        stack.push(x);
        if (minStack.isEmpty()) {
            minStack.push(x);
        } else {
            minStack.push(Math.min(x, minStack.peek()));
        }//注意,每次push的时候两边同时都要push,这样的话后面pop的时候就可以直接两个一起pop了
    }
    public void pop() {
        minStack.pop();
        stack.pop();
    }
    public int getMin() {
        return minStack.peek();
    }  
    public int top(){
        return stack.peek();
    }
}
原文地址:https://www.cnblogs.com/zmyvszk/p/5555075.html