O(1)时间getMin()的特殊栈

O(1)时间getMin()的特殊栈

 为了能够满足时间复杂度,必然是需要空间的付出,所以可以考虑利用两个栈来实现这个特殊的栈
 一个数据栈保存所有数据,一个最小数栈保存对应状态下的最小值。代码如下

class Solution {
public:
    //只有最小栈本身为空或者当前的值小于等于最小栈的栈顶就push
    //此处的等于必须包含,仔细领会。关键
    void push(int value) {
        if(stackMin.empty() || value<=stackMin.top())
           stackMin.push(value);
        stackData.push(value);
    }
    //弹出的数据等于最小栈顶的数据,最小栈的数据也要弹出
    void pop() {
        if(!stackData.empty()){
            if(stackMin.top()==stackData.top())
                stackMin.pop();
            stackData.pop();
        }
    }
    int top() {
        return stackData.top();
    }
    int min() {
        return stackMin.top();
    }
private:
    stack<int> stackData;
    stack<int> stackMin;
};

猜你喜欢

转载自blog.csdn.net/nwpubear/article/details/81211601