【剑指Offer-30】包含min函数的栈
问题
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。
解答
class MinStack {
public:
void push(int x) {
s.push(x);
if (s_min.empty() || s_min.top() >= x) s_min.push(x);
}
void pop() {
if (s.top() == s_min.top()) s_min.pop();
s.pop();
}
int top() {
return s.top();
}
int min() {
return s_min.top();
}
private:
stack<int> s, s_min;
};
重点思路
额外维护一个单调非严格递减栈s_min
用来保存栈s
弹出过程中可能的最小值。