https://leetcode.com/problems/min-stack/
用一個棧來實現,有個巧妙的方法,就是遇到一個更小的或者與當前相等的值,就push兩次。這樣就相遇先保存了上一次的最小值,再保存了當前的數值。
pop的時候,如果pop出來等於min,那麼就在pop一次。
class MinStack {
Stack<Integer> stack = new Stack();
int min = Integer.MAX_VALUE;
/** initialize your data structure here. */
public MinStack() {
}
public void push(int x) {
if (x <= min) {
stack.push(min);
min = x;
}
stack.push(x);
}
public void pop() {
if (stack.pop() == min) {
min = stack.pop();
}
}
public int top() {
return stack.peek();
}
public int getMin() {
return min;
}
}