代码
class MinStack { /** initialize your data structure here. */ private Stack<Integer> stackMin; //维护一个最小栈 private Stack<Integer> stackPush; //维护一个压入栈 public MinStack() { this.stackMin = new Stack<>(); this.stackPush = new Stack<>(); } public void push(int x) { stackPush.push(x); //压入栈 一定入栈 if(stackMin.isEmpty()) { //最小栈为空无需判断,直接压入 stackMin.push(x); } else { if(x <= stackMin.peek()) { stackMin.push(x); // 判断最小栈 栈顶元素 与 新压入的关系 } } } public void pop() { int top = stackPush.pop(); if(top == stackMin.peek()) { stackMin.pop(); } } public int top() { return stackPush.isEmpty() ? 0 : stackPush.peek(); } public int min() { return stackMin.isEmpty() ? 0 : stackMin.peek(); }}/** * 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.min(); */
class MinStack { /** initialize your data structure here. */ private Stack<Integer> stackMin; private Stack<Integer> stackPush; public MinStack() { this.stackMin = new Stack<>(); this.stackPush = new Stack<>(); } public void push(int x) { stackPush.push(x); if(stackMin.isEmpty()) { stackMin.push(x); } else { if(x <= stackMin.peek()) { stackMin.push(x); } } } public void pop() { if (! stackPush.isEmpty()) { if(stackPush.pop().equals(stackMin.peek())) { stackMin.pop(); } } } public int top() { if(stackPush.isEmpty()) { return 0; }else return stackPush.peek(); } public int min() { if(stackMin.isEmpty()) { return 0; }else return stackMin.peek(); }}/** * 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.min(); */