1. 程式人生 > >leetcode - 155 最小棧

leetcode - 155 最小棧

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

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

思路:

 使用兩個棧來實現,一個棧來按順序儲存push進來的資料,另一個用來存出現過的最小值。

class MinStack {
    private Stack<Integer> stack1 = new Stack<>();//資料棧
    private Stack<Integer> stack2 = new Stack<>();//輔助棧
    /** initialize your data structure here. */
    public MinStack() {
        
    }
    
    public void push(int x) {
        stack1.push(x);
        if(stack2.isEmpty() || stack2.peek() >= x){
            stack2.push(x);
        }
    }
    
    public void pop() {
        if(stack2.peek().equals(stack1.pop())){
            stack2.pop();
        }
    }
    
    public int top() {
        return stack1.peek();
    }
    
    public int getMin() {
        return stack2.peek();
    }
}