【剑指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弹出过程中可能的最小值。

posted @ 2021-02-24 17:08  tmpUser  阅读(43)  评论(0编辑  收藏  举报