题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。
示例
思路
新开一个辅助栈记录不严格递增序列,栈顶元素始终为栈内的最小值,注意多个相同最小值的情况,都要记录
代码
class MinStack {
Stack<Integer> st1, st2;
/** initialize your data structure here. */
public MinStack() {
st1 = new Stack<>();
st2 = new Stack<>();
}
public void push(int x) {
st1.add(x);
if(st2.isEmpty() || st2.peek() >= x) st2.add(x);
}
public void pop() {
int top = st1.peek();
st1.pop();
if(st2.peek() == top) st2.pop();
}
public int top() {
return st1.peek();
}
public int min() {
return st2.peek();
}
}