【工程化思路】
因为栈是先进后出的,可以用另一个栈来维护栈的最小值
所以只考虑入栈出栈两种情况
入栈时,x比当前最小值小的时候,min栈将x压入,更新最小值
出栈时,如果min顶的值与栈顶值相同,说明这个值不在栈中,需要弹出
【边界条件】
1. 栈为空的时候
2. 弹出最小值的时候
【注意事项】
- 注意不用import java.util.Stack; 不然会报错
- python 切过来又忘记写分号了。。。。。。
- java类内要先声明, 尽量用private
class MinStack {
private Stack<Integer> stack;
private Stack<Integer> minStack;
/** initialize your data structure here. */
public MinStack() {
stack = new Stack<>();
minStack = new Stack<>();
}
public void push(int x) {
if (minStack.empty() || x < minStack.peek()){
minStack.push(x);
}
stack.push(x);
}
public void pop() {
if (minStack.peek() == stack.peek()){
minStack.pop();
}
stack.pop();
}
public int top() {
return stack.peek();
}
public int getMin() {
return minStack.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.getMin();
*/