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

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

🌈大家好!本篇文章将介绍关于栈队列堆的OJ题,来自力扣:剑指 Offer 09. 用两个栈实现队列,展示代码语言暂时为:C++代码 😇。

今天继续力扣C++打卡(12.08)!✊✊✊

🔒1、题目:

用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
🌲示例 1🌲:

输入:
["CQueue","appendTail","deleteHead","deleteHead","deleteHead"]
[[],[3],[],[],[]]
输出:[null,null,3,-1,-1]

🌲示例 2🌲:

输入:
["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"]
[[],[],[5],[2],[],[]]
输出:[null,-1,null,null,5,2]

❗️ 限制❗️ :

1 <= values <= 10000
最多会对 appendTail、deleteHead 进行 10000 次调用

来源:力扣(LeetCode)👈

链接:https://leetcode.cn/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof/description/?orderBy=most_votes

☀️2、思路:

我们首先应了解,队列是先入先出,而栈是后入先出。
使用两个栈来实现队列功能,
1️⃣ 给两个栈分工不同,一个为入队栈,一个为出队栈,各自负责入队和出队;
2️⃣ 入队操作,直接压入入队栈即可;
3️⃣ 出队操作,优先检查出队栈是否有数据,若无,将入队栈全部推入到出队栈中,然后将栈顶返回(实质是将入队栈反转,取入队栈的栈底),将栈顶pop。

复杂度分析:
⏳时间复杂度:appendTail()函数为 O(1) ;deleteHead() 函数在 N次队首元素删除操作中总共需完成 N个元素的倒序。
🏠空间复杂度 O(N) :最差情况下,栈 A 和 B 共保存 N个元素。

🔑3、代码:

class CQueue {
public:
    stack<int> one,two;
    CQueue() { }    
    void appendTail(int value) {
        one.push(value);
    }    

    int deleteHead() {
        if(two.empty()){
            if(one.empty()){
                return-1;
            }
        while(!one.empty()){
            two.push(one.top());
            one.pop();
            }  
        }   
            
    int value=two.top();       
    two.pop();        
    return value;
    }
};

🐾4、总结

🌈题目理解起来比较复杂,重点需要理清输出是怎么来的,栈是先入后出的,两个栈来实现队列先入先出,最开始想法应该是需要进行反转。而在push的时候,不必将two还原至one,因为根据题目要求,只要出队元素顺序,以及出队判空操作正确,结果便正确,这样做复杂度最低。
🚀🚀觉得文章写得不错的老铁们,点赞评论关注走一波!谢谢啦🙏 🙏🙌 !

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

君莫笑lucky

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值