leetcode棧之最小棧

本文主要記錄一下leetcode棧之最小棧網絡

題目

設計一個支持 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 操做老是在 非空棧 上調用。

來源:力扣(LeetCode)
連接:https://leetcode-cn.com/problems/min-stack
著做權歸領釦網絡全部。商業轉載請聯繫官方受權,非商業轉載請註明出處。

題解

class MinStack {

    private int min = Integer.MAX_VALUE;

    private Stack<Integer> stack;

    /** initialize your data structure here. */
    public MinStack() {
        stack = new Stack<>();
    }
    
    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;
    }
}

/**
 * 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.getMin();
 */

小結

這裏再push的時候,計算了min值,同時再min值有更新的時候,先push了上一個min值,最後再push當前的min值;在pop的時候,判斷是否等於min值,等於的話,再pop一次,更新當前min值爲上一個min值,這裏這樣子實現是基於題目的假設(pop、top 和 getMin 操做老是在 非空棧 上調用)以及MinStack的調用順序。設計

doc

相關文章
相關標籤/搜索