题目链接
栈的最小值
题目描述
注意点
- 执行push、pop和min操作的时间复杂度必须为O(1)
解答思路
- 使用两个栈,一个栈deque存储栈中对应的元素值,另一个栈minDeque存储当前栈中所有元素的最小值,当执行push(int x)操作,deque直接将x添加到栈中,minDeque将Math.min(minDeque.peek(), x)加入到栈中;当执行pop()操作,将deque和minDeque的栈顶元素都弹出即可
代码
class MinStack {Deque<Integer> deque;Deque<Integer> minDeque;/** initialize your data structure here. */public MinStack() {deque = new ArrayDeque<>();minDeque = new ArrayDeque<>();minDeque.push(Integer.MAX_VALUE);}public void push(int x) {deque.push(x);minDeque.push(Math.min(minDeque.peek(), x));}public void pop() {deque.pop();minDeque.pop();}public int top() {return deque.peek();}public int getMin() {return minDeque.peek();}
}
关键点
- 使用另一个栈存储当前栈中所有元素的最小值