LeetCode.155. Min Stack

https://leetcode.com/problems/min-stack/

用一個棧來實現,有個巧妙的方法,就是遇到一個更小的或者與當前相等的值,就push兩次。這樣就相遇先保存了上一次的最小值,再保存了當前的數值。

pop的時候,如果pop出來等於min,那麼就在pop一次。

class MinStack {

    Stack<Integer> stack = new Stack();
    
    int min = Integer.MAX_VALUE;
    
    /** initialize your data structure here. */
    public MinStack() {
        
    }
    
    public void push(int x) {
        if (x <= min) {
            stack.push(min);
            min = x;
        }
        stack.push(x);
    }
    
    public void pop() {
        if (stack.pop() == min) {
            min = stack.pop();
        }
    }
    
    public int top() {
        return stack.peek();
    }
    
    public int getMin() {
        return min;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章