面试题30. 包含min函数的栈

思路:使用辅助栈。

栈A实现正常的push,pop,top函数。

栈B在每次栈Apush的时候判断,栈顶元素是否>=要push进栈A的元素。

注意的点:

1.

if(B.empty() || B.peek() >= x)

此处必须要>=,因为在>情况下,push(0),push(0),pop(),栈B就没有元素了。

2.pop()函数中,A.pop()必须写在if循环外,因为不管怎么样都要执行。(当时写循环里了)

3.为什么不用 == 而用 equals

参考https://www.jianshu.com/p/9cb9c61b0986

面试题30. 包含min函数的栈

class MinStack {

    Stack<Integer> A, B;
    /** initialize your data structure here. */
    public MinStack() {
        A = new Stack<>();
        B = new Stack<>();
    }
    
    public void push(int x) {
        A.add(x);
        if(B.empty() || B.peek() >= x)
            B.add(x);
    }
    
    public void pop() {
        if(A.peek().equals(B.peek()))
            B.pop();
        A.pop();
    }
    
    public int top() {
        return A.peek();
    }
    
    public int min() {
        return B.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();
 */

 

posted @ 2021-03-27 15:08  星予  阅读(51)  评论(0)    收藏  举报