19、包含Min函数的栈

题目描述:

  定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)。

解题思路:

  把每次的最小元素之前的最小元素和新压入栈的元素两者的较小值)都保存起来放到另外一个辅助栈里。下图展示了栈内压入3、4、2、1之后接连两次弹出栈顶数字再压入0时,数据栈、辅助栈和最小值的状态。
19、包含Min函数的栈

  从表中我们可以看出,如果每次都把最小元素压入辅助栈,那么就能保证辅助栈的栈顶一直都是最小元素

Demo:

class Solution {
public:
    stack<int> st1;
    // 使用一个辅助栈
    stack<int> stmp;
    void push(int value) {
        st1.push(value);
        if (stmp.empty() || value < stmp.top())
            stmp.push(value);
        else
            stmp.push(stmp.top());
    }
    void pop() {
        st1.pop();
        stmp.pop();
    }
    int top() {
        return st1.top();
    }
    int min() {
        return stmp.top();
    }
};