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

棧---最小棧

  1. 題目 設計一個支援 push,pop,top 操作,並能在常數時間內檢索到最小元素的棧。 push(x) – 將元素 x 推入棧中。 pop() – 刪除棧頂的元素。 top() – 獲取棧頂元素。 getMin() – 檢索棧中的最小元素。
  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.
  1. 程式碼實現 a.維護兩個棧:正常棧,最小棧。若入棧元素小於等於最小棧的棧頂元素入棧。
class MinStack {
    private Stack<Integer> stack,minStack;

    /** initialize your data structure here. */
    public MinStack() {
        //初始化正常棧
        stack = new Stack();
        //初始化最小棧
        minStack = new Stack();
    }

    public void push(int x) {
        stack.push(x);
        //若最小棧為空,或入棧元素小於等於最小棧的棧頂元素則入棧
        if(minStack.empty()||x<=minStack.peek()){
            minStack.push(x);
        }
    }

    public void pop() {
        int top =stack.pop();
        //若出棧元素等於最小棧棧頂元素,最小棧棧頂元素也得出棧
        if(minStack.peek()==top){
            minStack.pop();
        }
    }

    public int top() {
       return stack.peek();
    }
    public int getMin() {
        return minStack.peek();
    }
}