LeetCode 155. 最小栈

单调栈

再加一个单调栈来维护目前的最小值

C++ 代码

class MinStack {
public:
    /** initialize your data structure here. */
    stack<int> st;
    stack<int> minist;
    MinStack() {
        
    }
    
    void push(int x) {
        st.push(x);
        if (minist.empty() || minist.top() >= x) minist.push(x);
    }
    
    void pop() {
        if (minist.top() == st.top()) minist.pop();
        st.pop();
    }
    
    int top() {
        return st.top();
    }
    
    int getMin() {
        return minist.top();
    }
};

一个栈的做法

我们只开一个普通栈和一个变量 min_value 记录最小值。栈中存放当前元素与上一个版本(还没有将这个元素入栈时)最小值的差值。

C++ 代码

class MinStack {
public:
    typedef long long LL;
    stack<LL> st;
    LL minValue = 0;
    MinStack() {
        
    }
    
    void push(int x) {
        if (st.empty())
        {
            st.push(x);
            minValue = x;
        } 
        else
        {
            st.push(x - minValue);
            minValue = min(minValue, (LL)x);
        } 
    }
    
    void pop() {
        if (st.top() < 0) minValue -= st.top();
        st.pop();        
    }
    
    int top() {
        if (st.size() == 1) return st.top();
        if (st.top() > 0) return st.top() + minValue;
        else return minValue;
    }
    
    int getMin() {
        return minValue;
    }
};
posted @ 2021-01-07 10:33  alexemey  阅读(48)  评论(0)    收藏  举报