刷leetcode-day37

一、題目:

155.最小棧:

設計一個支持 push,pop,top 操作,並能在常數時間內檢索到最小元素的棧。

  • push(x) -- 將元素 x 推入棧中。
  • pop() -- 刪除棧頂的元素。
  • top() -- 獲取棧頂元素。
  • getMin() -- 檢索棧中的最小元素。

示例:

MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin();   --> 返回 -3.
minStack.pop();
minStack.top();      --> 返回 0.
minStack.getMin();   --> 返回 -2.

二、思路:

使用C++內置的容器適配器stack,新建兩個stack,一個保存所有的元素,另一個保存第一個棧裏的最小元素。對於getmin()操作只需對第二個棧進行top()操作即可。

三、代碼(C++):

class MinStack {
public:
    /** initialize your data structure here. */
    MinStack() {
        
    }
    
    void push(int x) {
        s1.push(x);
        if(s2.empty())                      //如果s2爲空,元素直接進棧
            s2.push(x);
        else
        {
            s2.push(s2.top()<x?s2.top():x);          //如果x更小,則x進棧,否則s2.top()進棧
        }
    }
    
    void pop() {
        s2.pop();
        s1.pop();
        
    }
    
    int top() {
        return s1.top();
    }
    
    int getMin() {
        return s2.top();
    }
private:
    stack<int> s1;           //新建兩個stack
    stack<int> s2;
};

四、擴展:

使用內置的容器適配器比自己寫一個棧的數據結構快很多,C++11的標準庫容器性能幾乎與最精心優化過的同類數據結構一樣好,所以C++程序優先使用標準庫容器。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章