题目:
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。
push(x) – 将元素 x 推入栈中。
pop() – 删除栈顶的元素。
top() – 获取栈顶元素。
getMin() – 检索栈中的最小元素。
示例:
MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.getMin(); --> 返回 -3. minStack.pop(); minStack.top(); --> 返回 0. minStack.getMin(); --> 返回 -2.
分析
(辅助栈)我们需要使用Java两个堆栈,一个堆栈执行正常的 push、pop、peek 操作,另一个堆栈存储当前的最小值。出栈时,最小值出栈才同步;入栈时,最小值入栈才同步。。
代码
class MinStack {
private Stack<Integer> stack = new Stack<>();
private Stack<Integer> min = new Stack<>();
/** initialize your data structure here. */
public MinStack() {
}
public void push(int x) {
stack.push(x);
if (min.empty() || min.peek() >= x){
min.push(x);
}
}
public void pop() {
int x = stack.pop();
if (x == min.peek()){
min.pop();
}
}
public int top() {
return stack.peek();
}
public int getMin() {
return min.peek();
}
}