LeetCode 155 最小栈
设计一个支持
push
,pop
,top
操作,并能在常数时间内检索到最小元素的栈。实现
MinStack
类:
MinStack()
初始化堆栈对象。void push(int val)
将元素val推入堆栈。void pop()
删除堆栈顶部的元素。int top()
获取堆栈顶部的元素。int getMin()
获取堆栈中的最小元素。
这道题目可以使用两个栈,一个辅助栈,一个元素栈,两个栈同步插入与删除,一个元素,一个存储与每个元素对应的最小值。
当一个元素要入栈时,我们取当前辅助栈的栈顶存储的最小值,与当前元素比较得出最小值,将这个最小值插入辅助栈中;当一个元素要出栈时,我们把辅助栈的栈顶元素也一并弹出。
某一个时刻,栈内元素的最小值就存储在辅助栈的栈顶元素中。
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(val,minstack.peek()));
}
public void pop() {
xstack.pop();
minstack.pop();
}
public int top() {
return xstack.peek();
}
public int getMin() {
return minstack.peek();
}
}