力扣 155. 最小棧 棧+思維

https://leetcode-cn.com/problems/min-stack/
在這裏插入圖片描述

思路:用兩個棧,第一個棧s1s_1正常做棧的操作,第二個棧s2s_2維持一個單調非升的序列,從而保證最小值就在s2s_2的棧頂,現在考慮怎麼維護第二個棧,如果s2s_2爲空或者當前要壓入的元素<=s2.top()<=s_2.top(),那麼直接將其壓到第二個棧內,否則不做任何操作即可。

class MinStack {
public:
    /** initialize your data structure here. */
    stack<int> s1;
    stack<int> s2; //單調下降棧
    MinStack() {
        
    }
    
    void push(int x) {
        s1.push(x);
        if(s2.empty()||x<=s2.top())
            s2.push(x);
    }
    
    void pop() {
        int val=s1.top();
        s1.pop();
        if(val==s2.top())
            s2.pop();
    }
    
    int top() {
        return s1.top();
    }
    
    int getMin() {
        return s2.top();
    }
};

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack* obj = new MinStack();
 * obj->push(x);
 * obj->pop();
 * int param_3 = obj->top();
 * int param_4 = obj->getMin();
 */
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章