剑指 Offer 09. 用两个栈实现队列
剑指 Offer 09. 用两个栈实现队列
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
输入:
["CQueue","appendTail","deleteHead","deleteHead","deleteHead"]
[[],[3],[],[],[]]
输出:[null,null,3,-1,-1]
输入:
["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"]
[[],[],[5],[2],[],[]]
输出:[null,-1,null,null,5,2]
- 方法:
- 双栈
队列:“先进先出”
栈:“先进后出”
stack1作为压入栈,stack2作为输出栈
尾添操作:
- 直接在stack1栈顶添加val
- 头删操作:
-
如果stack2不为空(表示输出栈已经有完成倒序的元素
-
直接弹出stack2栈顶元素
-
如果stack2为空,且stack1也为空(没有元素)
-
返回-1
-
stack2为空,stack1不为空
-
将stack1压入stack2,弹出栈顶
class CQueue { public: stack<int> s1, s2; void appendTail(int value) { s1.push(value); } int deleteHead() { if(!s2.empty()) { int res = s2.top(); s2.pop(); return res; } if (s1.empty()) return -1; while(!s1.empty()) { s2.push(s1.top()); s1.pop(); } int res = s2.top(); s2.pop(); return res; } };
复杂度分析:
- 时间复杂度:appendTail为O(1),deleteHead均摊为O(1),因为对于每个元素只会移动一次
- 空间复杂度:O(n) n为元素个数
posted on 2023-04-12 22:58 SocialistYouth 阅读(9) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人