原题:#155_最小栈
- 使用两个栈:
- 一个是数据栈,全部数都可以进入
- 一个是最小值栈,每输入一个数时,就与当前的最小值比较
- 若大于当前最小值,则再放入一个当前最小值到最小值栈
- 出栈时,数据栈与最小值栈同步出栈
- 为什么要重复放入最小值?
- 最小值栈可以理解为当前时刻数据栈对应的最小值
class MinStack {
private Stack<Integer> dataStack;
private Stack<Integer> minStack;
private int min;
/** initialize your data structure here. */
public MinStack() {
dataStack = new Stack<>();
minStack = new Stack<>();
min = Integer.MAX_VALUE;
}
public void push(int x) {
dataStack.add(x);
min = Math.min(min,x);
minStack.add(min);
}
public void pop() {
dataStack.pop();
minStack.pop();
min = minStack.isEmpty() ? Integer.MAX_VALUE : minStack.peek();
}
public int top() {
return dataStack.peek();
}
public int getMin() {
return minStack.peek();
}
}