题目:
设计一个支持 push
,pop
,top
操作,并能在常数时间内检索到最小元素的栈。
实现 MinStack
类:
MinStack()
初始化堆栈对象。void push(int val)
将元素val推入堆栈。void pop()
删除堆栈顶部的元素。int top()
获取堆栈顶部的元素。int getMin()
获取堆栈中的最小元素。
方法:用一个变量保存最小值,当有更小的值来的时候,我们只需要把之前的最小值入栈,当前更小的值再入栈即可。当这个最小值要出栈的时候,下一个值便是之前的最小值了。
代码:
class MinStack {int min = Integer.MAX_VALUE;Stack<Integer> stack;public MinStack() {stack = new Stack<Integer>();}public void push(int val) {// 当前值更小if (val <= min) {// 将之前的最小值保存stack.push(min);// 更新最小值min = val;}stack.push(val);}public void pop() {// 如果弹出的值是最小值,那么将下一个元素更新为最小值if (stack.pop() == min) {min = stack.pop(); // 关键,连退两个}}public int top() {return stack.peek();}public int getMin() {return min;}
}/*** Your MinStack object will be instantiated and called as such:* MinStack obj = new MinStack();* obj.push(val);* obj.pop();* int param_3 = obj.top();* int param_4 = obj.getMin();*/