《剑指Offer》09-用两个栈实现队列
2022/1/20 23:14:06
本文主要是介绍《剑指Offer》09-用两个栈实现队列,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
理解题意
本题最难的就是理解题啥意思:
本来理解的就对,但看了一眼解析直接跑到了外太空;
咱们来看题中给的示例:
输入: ["CQueue","appendTail","deleteHead","deleteHead"] [[],[3],[],[]] 输出:[null,null,3,-1] 输入: ["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"] [[],[],[5],[2],[],[]] 输出:[null,-1,null,null,5,2]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
输入的两行,个数相同,一一对应,我这里误解为这事两个栈了;其实不然,此题为两个栈来模拟的一个逻辑队列,很好判断,抓住一点,队列内的元素应该一致
,一会是字符串,一会是数,可能性很小,所以可以很快推出这俩列表是给了操作队列的操作和操作数,以示例1为例:
- CQueue []:创建空队列;--> null (CQueue无返回值)
- appendTail 3:队列插入3;--> null (AppendTail无返回值)
- deleteHead []:出队;--> 3(出队:返回所出队元素)
- deleteHead []:出队;--> -1 (出队:但队列此时为空)
双栈实现队列过程详情:
栈:先进后出,队列:先进先出;
所以可以设置stack1为入队栈,stack2为出队栈;
stack2中有元素一定是先于stack1中元素的,所有stack2中有元素就直接出栈即为出队;
算法实现
代码详情:Coding-Interviews/09-用两个栈实现队列-参考学习 at main · kp-hang/Coding-Interviews (github.com)
type CQueue struct { // 结构体定义; stack1 *list.List stack2 *list.List } func Constructor() CQueue { // 结构体实例化,最常用; return CQueue{ stack1: list.New(), stack2: list.New(), } } func (this *CQueue) AppendTail(value int) { this.stack1.PushBack(value) // 尾插; } func (this *CQueue) DeleteHead() int { if this.stack2.Len() == 0 { //出栈为空,就从入栈里转移元素; for this.stack1.Len() > 0 { this.stack2.PushBack(this.stack1.Remove(this.stack1.Back())) } } if this.stack2.Len() != 0 { e := this.stack2.Back() this.stack2.Remove(e) return e.Value.(int) } return -1 } /** * Your CQueue object will be instantiated and called as such: * obj := Constructor(); * obj.AppendTail(value); * param_2 := obj.DeleteHead(); */
值得注意的是认真阅读标准库函数的说明,比如:
func (*list.List).Remove(e *list.Element) interface{} (list.List).Remove on pkg.go.dev Remove removes e from l if e is an element of list l. It returns the element value e.Value. The element must not be nil.
这篇关于《剑指Offer》09-用两个栈实现队列的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-07如何利用看板工具优化品牌内容创作与审批,确保按时发布?
- 2025-01-07百万架构师第十一课:源码分析:Spring 源码分析:Spring源码分析前篇|JavaGuide
- 2025-01-07质量检测标准严苛,这 6 款办公软件达标了吗?
- 2025-01-07提升品牌活动管理的效率:看板工具助力品牌活动日历的可视化管理
- 2025-01-07宠物商场的精准营销秘籍:揭秘看板软件的力量
- 2025-01-07“30了,资深骑手” | 程序员能有什么好出路?
- 2025-01-07宠物公园的营销秘籍:看板软件如何帮你精准触达目标客户?
- 2025-01-07从任务分解到资源优化:甘特图工具全解析
- 2025-01-07企业升级必备指南:从传统办公软件到SaaS工具的转型攻略
- 2025-01-07一文告诉你IT项目管理如何做到高效