leetcode 155 Min Stack

设计一个最小栈,要求push,pop,top,getMin都是O(1)的。

关键在于:

维护一个普通栈的同时,维护额外一个栈,保存正常栈的递减序列。即除了第一元素,之后的元素都比最小栈的top小。

  原理想想就懂,只有更小的能成为min。注意相同元素也入最小栈就行。

class MinStack {
public:
    vector<int> v;
    vector<int> m;
    /** initialize your data structure here. */
    MinStack() {
        
    }
    
    void push(int x) {
        v.push_back(x);
        if (m.size() == 0 || m.back() >= x)
            m.push_back(x);
    }
    
    void pop() {
        int t = v.back();
        v.pop_back();
        if (m.back() == t)
            m.pop_back();
    }
    
    int top() {
        return v.back();
    }
    
    int getMin() {
        return m.back();
    }
};

 

posted on 2018-01-29 11:04  willaty  阅读(75)  评论(0编辑  收藏  举报

导航