• 题目描述:

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

  • 分析:

    首先想到的是在栈里添加一个成员变量用来保存最小的元素,每次压入一个新元素进栈时与该变量比较,如果更小则更新最小元素。那么问题来了,如果当前栈中最小元素出栈,我们就无法得到当前栈中的最小元素了。
    所以我们只用一个变量保存最小值是不够的了,可以使用另一个辅助栈来保存每次的最小值(即之前的最小元素和新入栈的元素两者的最小值),辅助栈中的元素个数和数据栈中的元素个数是一样的,辅助栈栈顶元素即当前数据栈的最小值。

    code:

    public:
    void push(int value) {
        dataStack.push(value);
        if(minStack.empty() || value < minStack.top())
            minStack.push(value);
        else
            minStack.push(minStack.top());
    }
    void pop() {
        if(!dataStack.empty() && !minStack.empty()){
            dataStack.pop();
            minStack.pop();
        }
    }
    int top() {
        return dataStack.top();
    }
    int min() {
        return minStack.top();
    }
    private:
    stack<int> dataStack,minStack;
    
 posted on 2017-05-04 21:12  Bill_LHR  阅读(145)  评论(0编辑  收藏  举报