週三第七題  包含min函數的棧 - Java

    AcWing打卡活動

《劍指Offer》打卡活動 

週三第七題  包含min函數的棧

/**
 * 思路
 * 需要一個額外的棧,用以記錄最小值
 * 例子:如壓入如下順序
 *  3 -1 2 -2 5
 * 則recordStack 的內容爲
 * 3 -1 -1 -2 -2
 * 
 * 
 */ 
class MinStack {
    
    Stack<Integer> stack;
    Stack<Integer> recordStack;
    int min;
    /** initialize your data structure here. */
    public MinStack() {
        stack = new Stack();
        recordStack = new Stack();
    }
    
    public void push(int x) {
        stack.push(x);
        if(recordStack.empty() || x < min) {
            recordStack.push(x);
            min = x;
        } else {
          recordStack.push(min);  
        }
    }
    // 彈出操作 兩個棧同時彈出
    public void pop() {
        stack.pop();
        recordStack.pop();
        // 如果彈出後,輔助棧爲空,則需要更新最小值
        if(!recordStack.empty()) {
            min = recordStack.peek();
        } else {
            min = Integer.MIN_VALUE;
        }
    }
    
    public int top() {
        return stack.peek();
    }
    
    public int getMin() {
        return recordStack.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.getMin();
 */

發現可以不用使用min這個變量,如此一來代碼量將更少,代碼如下

/**
 * 思路
 * 需要一個額外的棧,用以記錄最小值
 * 例子:如壓入如下順序
 *  3 -1 2 -2 5
 * 則recordStack 的內容爲
 * 3 -1 -1 -2 -2
 * 
 * 
 */ 
class MinStack {
    
    Stack<Integer> stack;
    Stack<Integer> recordStack;
    /** initialize your data structure here. */
    public MinStack() {
        stack = new Stack();
        recordStack = new Stack();
    }
    
    public void push(int x) {
        stack.push(x);
        if(recordStack.empty() || x < recordStack.peek()) {
            recordStack.push(x);
        } else {
          recordStack.push(recordStack.peek());  
        }
    }
    // 彈出操作 兩個棧同時彈出
    public void pop() {
        stack.pop();
        recordStack.pop();
    }
    
    public int top() {
        return stack.peek();
    }
    
    public int getMin() {
        return recordStack.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.getMin();
 */

 

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