包含min函數的棧題解

題目:

定義棧的數據結構,請在該類型中實現一個能夠得到棧的最小元素的 min 函數在該棧中,調用 min、push 及 pop 的時間複雜度都是 O(1)。

示例:

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

提示:

各函數的調用總次數不超過 20000 次

思路:

空間換時間。創建兩個棧,一個數據棧,一個輔助棧。在輔助棧中存儲數據棧中每個元素爲棧頂時,數據棧的最小值。數據棧添加元素時,此時的數據棧最小值要麼是當前添加的元素,要麼是添加前的最小值。

代碼:

class MinStack {
    //數據棧
    Stack<Integer> data = new Stack<>();
    //輔助棧
    Stack<Integer> mins = new Stack<>();

    /** initialize your data structure here. */
    public MinStack() {
        //初始化輔助棧
        mins.push(Integer.MAX_VALUE);
    }
    
    
    public void push(int x) {
        int min = mins.peek();
        if(x < min) {
            min = x;
        }
        data.push(x);
        mins.push(min);
    }
    
    public void pop() {
        data.pop();
        mins.pop();
    }
    
    public int top() {
        return data.peek();
    }
    
    public int min() {
        return mins.peek();
    }
}

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack obj = new MinStack();
 * obj.push(x);
 * obj.pop();
 * int param_3 = obj.top();
 * int param_4 = obj.min();
 */

 


 

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