2018-11-24 最小棧

powerx_yc發表於2018-11-24

題目:

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

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

解法:

維持兩個棧, 一個是正常的棧, 一個棧的棧頂是正常棧的最小元素.
在每次壓入棧的時候, 保持棧頂元素是最小的, 然後入棧即可.

class MinStack {
    
    private Stack<Integer> stack;
    private Stack<Integer> mStack;
    private int length = 0;
    
    /** initialize your data structure here. */
    public MinStack() {
        stack = new Stack<>();
        mStack = new Stack<>();
    }
    
    public void push(int x) {
        stack.push(x);
        if(length == 0){
            mStack.push(x);
        }else{
            // 壓入棧的時候保證當前棧頂元素是最小的
            mStack.push(Math.min(mStack.peek(), x));
        }
        length += 1;
    }
    
    public void pop() {
        length -= 1;
        mStack.pop();
        stack.pop();
    }
    
    public int top() {
        return stack.peek();
    }
    
    public int getMin() {
        return mStack.peek();
    }
}

相關文章