/*
1. 使用一个单独栈保存最小值
2. 对于当前元素等于最小值栈顶元素也需要进栈
3. getMin() 当最小值栈为空,栈最小值为0.
*/
class MinStack {
Stack<Integer> stack = new Stack<>();
Stack<Integer> stack1 = new Stack<>();
public void push(int x) {
stack.add(x);
if (stack1.empty() || x <= stack1.peek()) stack1.add(x);
}
public void pop() {
if (!stack.empty()) {
int x = stack.pop();
if (!stack1.empty() && x == stack1.peek()) stack1.pop();
}
}
public int top() {
if (!stack.empty()) return stack.peek();
else return -1;
}
public int getMin() {
if (!stack1.empty()) return stack1.peek();
else return 0;
}
}
/**
* 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();
*/