155.最小棧

nxy777發表於2020-09-24

題目:

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

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

示例:

      輸入:
[“MinStack”,“push”,“push”,“push”,“getMin”,“pop”,“top”,“getMin”]
[[],[-2],[0],[-3],[],[],[],[]]

輸出:
        [null,null,null,null,-3,null,0,-2]

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

提示:

​         pop、top 和 getMin 操作總是在 非空棧 上呼叫。

思路:

​       用一個棧維護正常的進棧出棧,另一個棧中每次存入都要比較,存入最小的元素,這樣getMin就可以從最小棧中獲取值

程式碼:

class MinStack {
public:
    /** initialize your data structure here. */
    
    stack<int> stk, stk_min;
        
    MinStack() {
        
    }
    
    void push(int x) {
        stk.push(x);
        if (stk_min.empty()) stk_min.push(x);
        else stk_min.push(min(x, stk_min.top()));
    }
    
    void pop() {
        stk.pop();
        stk_min.pop();
    }
    
    int top() {
        return stk.top();
    }
    
    int getMin() {
        return stk_min.top();
    }
};

相關文章