leetcode33(最小栈)
设计一个支持 push
,pop
,top
操作,并能在常数时间内检索到最小元素的栈。
实现 MinStack
类:
MinStack()
初始化堆栈对象。void push(int val)
将元素val推入堆栈。void pop()
删除堆栈顶部的元素。int top()
获取堆栈顶部的元素。int getMin()
获取堆栈中的最小元素。
示例 1:
输入: ["MinStack","push","push","push","getMin","pop","top","getMin"] [[],[-2],[0],[-3],[],[],[],[]]输出: [null,null,null,null,-3,null,0,-2]
思路:
正常在getMin新建辅助栈,获取最小值时时间会超限
所以,在该类开始时就建立两个栈,一个用来存放数据,一个存放每个数据存入时更新的最小值
对两个栈同时做push和pop操作,确保两者对应正确
class MinStack {Stack<Integer> stack;Stack<Integer> minStack;public MinStack() {stack = new Stack<>();minStack = new Stack<>();minStack.push(Integer.MAX_VALUE);}public void push(int val) {stack.push(val);minStack.push(Math.min(val, minStack.peek()));}public void pop() {if(!stack.isEmpty())stack.pop();minStack.pop();}public int top() {if (!stack.isEmpty()){return stack.peek();}else return -1;}public int getMin() {if (stack.isEmpty()) {return -1;}int min = minStack.peek();return min;}
}