/* * 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(); } }