1201-用栈实现最小队列

最小栈 leetcode 232.

题目大意:仅使用两个栈实现一个队列,要求实现push、pop、peek、empty
解题思路:栈和队列刚好想法,队列是先进先出,设定a队列正常存放,b队列存放倒序,push的操作正常存放进a队列,pop的操作需要倒序,peek也需要倒序,将判断方法放置于peek中,peek操作不会操作具体队列,需要判定三个情况,b队列有值那就是b队列的peek值,否则判断a队列是否有值,都没有就是空的,最后就是将a队列的值pop出来push进b队列实现倒序存储,empty方法就是两个队列均为空,pop的话,首先执行一下peek函数,作为最终返回值,在这中间需要将b队列执行一下pop操作。
题解及注释:

class MyQueue {
    private Stack<Integer> a;
    private Stack<Integer> b;
    

    public MyQueue() {
        a = new Stack<Integer>();
        b = new Stack<Integer>();
    }
    
    public void push(int x) {
        a.push(x);
    }
    
    public int pop() {
        int peek = peek();
        b.pop();
        return peek;
    }
    
    public int peek() {
        if (!b.empty()) return b.peek();
        if (a.empty()) return -1;
        while (!a.empty()) {
            b.push(a.pop());
        }
        return b.peek();
    }
    
    public boolean empty() {
        return a.empty() && b.empty();
    }
}

/**
 * Your MyQueue object will be instantiated and called as such:
 * MyQueue obj = new MyQueue();
 * obj.push(x);
 * int param_2 = obj.pop();
 * int param_3 = obj.peek();
 * boolean param_4 = obj.empty();
 */

总结:题解写出来后其实基本上都已经熟悉了,为什么pop的时候不直接返回b.pop(),因为特殊情况只是在peek()做了处理,但是返回值是存放在pop()中的peek值里的,所以最终要返回该peek值

请登录后发表评论

    没有回复内容