题目
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
实现 MinStack 类:
-
MinStack() 初始化堆栈对象。
-
void push(int val) 将元素val推入堆栈。
-
void pop() 删除堆栈顶部的元素。
-
int top() 获取堆栈顶部的元素。
-
int getMin() 获取堆栈中的最小元素。
示例
引入辅助栈minStack的原因是 不可能用一个min来保存当前栈的最小值,因为一旦出栈一个元素正好是min,那剩下的元素的最小值就没法立即提取了。
所以引入辅助栈,每入栈一个元素,将minStack栈顶元素与该值比较,将更小的入栈
比如,xStack依次入栈: bottom: 1,-2,4,-3,5
则minStack中的元素: bottom:MAX_VALUE,1,-2,-2,-3,-3
class MinStack {
Deque<Integer> xStack;
Deque<Integer> minStack;
public MinStack() {
xStack = new LinkedList<Integer>();
minStack = new LinkedList<Integer>();
minStack.push(Integer.MAX_VALUE);
}
public void push(int val) { //每入栈一个元素,将最小值也入辅助栈
xStack.push(val);
minStack.push(Math.min(minStack.peek(),val));
}
public void pop() { //弹栈一个元素,辅助栈也弹栈,保证辅助栈栈顶元素是当前栈的最小值
xStack.pop();
minStack.pop();
}
public int top() {
return xStack.peek();
}
public int getMin() {
return minStack.peek();
}
}