用栈实现栈
当一个元素要入栈时,我们取当前辅助栈的栈顶存储的最小值,与当前元素比较得出最小值,将这个最小值插入辅助栈中;
当一个元素要出栈时,我们把辅助栈的栈顶元素也一并弹出;
在任意一个时刻,栈内元素的最小值就存储在辅助栈的栈顶元素中
class MinStack {
Deque<Integer> xStack;
Deque<Integer> minStack;
public MinStack() {
minStack = new LinkedList<Integer>();//定义一个辅助栈用来存储每进入一个元素时当前所有元素的最小值
Stack = new LinkedList<Integer>();//原有的栈
minStack.push(Integer.MAX_VALUE);
}
public void push(int x) {
Stack.push(x);
minStack.push(Math.min(minStack.peek(), x));
}
public void pop() {
Stack.pop();
minStack.pop();
}
public int top() {
return Stack.peek();
}
public int getMin() {
return minStack.peek();
}
}