算法

LCR 125. 图书整理 II

2023-11-12  本文已影响0人  红与树

戚戚复戚戚,我心汝不知。

题目

LeetCode每日一题,参考LCR 125. 图书整理 II

解题思路

队列

class CQueue {
    ArrayDeque<Integer> q = new ArrayDeque<>();
    public CQueue() {}
    public void appendTail(int value) {
        q.offer(value);
    }
    public int deleteHead() {
        if(q.isEmpty()) return -1;
        else return q.pop();
    }
}

复杂度分析

两个栈模拟队列操作

两个栈可模拟队列,这个特性还是挺有意思的。

class CQueue {
    //针对栈的操作只能使用push和pop
    ArrayDeque<Integer> q1 = new ArrayDeque<>(), q2 = new ArrayDeque<>();
    public CQueue() {}
    //A用来存 B用来取
    public void appendTail(int value) {// O(1)
        q1.push(value);
    }
    public int deleteHead() { // 均摊 O(1)。对于每个元素,至多入栈和出栈各两次。
        if(q1.isEmpty()) return -1;
        while(q1.size() > 0) {
            q2.push(q1.pop());
        }
        int r = q2.pop();
        while(q2.size() > 0) {
            q1.push(q2.pop());
        }
        return r;
    }
}
/**
 * Your CQueue object will be instantiated and called as such:
 * CQueue obj = new CQueue();
 * obj.appendTail(value);
 * int param_2 = obj.deleteHead();
 */

复杂度分析

2023/10/13

上一篇 下一篇

猜你喜欢

热点阅读