码迷,mamicode.com
首页 > 其他好文 > 详细

剑指 Offer 09. 用两个栈实现队列

时间:2021-04-06 15:09:29      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:自己   n个元素   called   off   queue   没有   直接   ram   vat   

仅供自己学习

思路:

需要定义两个栈st1,st2.第一次调用CQueue()时,可以用于清空两个栈。加入元素的函数直接加入进st1即可,对于删除函数,要先判断st2是否为空,如果不为空直接从st2弹出元素,如果为空就从st1一直加元素直到st1为空,如果st1为空,st2没有元素加进去,那么就返回-1即可。
代码:

class CQueue {
private:
    stack<int> st1;
    stack<int> st2;
public:
    CQueue() {
        while(!st1.empty()) st1.pop();
        while(!st2.empty()) st2.pop();
    }
    
    void appendTail(int value) {
        st1.push(value);
        return;
    }
    
    int deleteHead() {
        if(st2.empty()) {
            while(!st1.empty()){
            int temp=st1.top(); st1.pop();
            st2.push(temp);
            }
        }
        if(st2.empty()){
            return -1;
        }
        int det=st2.top();st2.pop();
        return det;
    }
};

/**
 * Your CQueue object will be instantiated and called as such:
 * CQueue* obj = new CQueue();
 * obj->appendTail(value);
 * int param_2 = obj->deleteHead();
 */

插入时间复杂度为O(1),删除的话 因为每个数都是从st1移除加到st2中,所以也是O(1),只是每次st2空后 从st1加进来n个元素就需要O(n),但总体来看仍然是O(1)。
空间复杂度是O(n)因为用两个栈嘛

剑指 Offer 09. 用两个栈实现队列

标签:自己   n个元素   called   off   queue   没有   直接   ram   vat   

原文地址:https://www.cnblogs.com/Mrsdwang/p/14617628.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!