class MinStack {//用一個輔助棧存儲對應棧元素為棧頂時的最小值//當原棧插入一個元素時,輔助棧插入此值與當前輔助棧棧頂的值(即插入前的最小值)的較小值Stack<Integer> sta1;Stack<Integer> sta2;public MinStack() {sta1 = new Stack<Integer>();sta2 = new Stack<Integer>();sta2.push(Integer.MAX_VALUE);}public void push(int val) {sta1.push(val);sta2.push(Math.min(val, sta2.peek()));}public void pop() {sta1.pop();sta2.pop();}public int top() {return sta1.peek();}public int getMin() {return sta2.peek();}
}/*** Your MinStack object will be instantiated and called as such:* MinStack obj = new MinStack();* obj.push(val);* obj.pop();* int param_3 = obj.top();* int param_4 = obj.getMin();*/