剑指 Offer 09. 用两个栈实现队列(相邻相同操作只需要移动一次)

题目

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

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

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

思路

建立两个栈,一个主栈,一个辅助栈,主栈用于插入,辅助栈用于删除
插入时,如果辅助栈为空,说明上一次操作为插入,直接在主栈中插入即可,反之需要将辅组栈中数据从尾到头依次搬到主栈中
删除时,如果主栈为空,说明上一次操作为删除,直接在辅助栈中删除,反之搬数据

优点

相邻操作相同,只需要搬动一次数据即可

代码

type CQueue struct {stack []intsubStack []int
}func Constructor() CQueue {return CQueue{stack : make([]int, 0),subStack : make([]int, 0),}
}func (this *CQueue) AppendTail(value int)  {// 插入时,如果辅助栈为空,直接在主栈进行插入if  len(this.subStack) == 0 {this.stack = append(this.stack, value)return}// 将辅助栈中数据从尾到头搬到主栈中,进行插入endIndex := len(this.subStack) -1for ; endIndex >= 0; endIndex--{this.stack = append(this.stack, this.subStack[endIndex])}this.stack = append(this.stack, value)// 清空辅助栈this.subStack = this.subStack[:0]}func (this *CQueue) DeleteHead() int {// 主栈与辅助栈都为空,队列中没有数据,返回-1if len(this.stack) == 0 && len(this.subStack) == 0{return -1}value := int(0)// 主栈为空,直接在辅助栈中进行删除if len(this.stack) == 0 {endIndex := len(this.subStack)-1value = this.subStack[endIndex]this.subStack = this.subStack[:endIndex]return value}// 主栈有数据,从尾到头将数据搬到辅助栈后,进行删除endIndex := len(this.stack) -1for ; endIndex > 0; endIndex--{this.subStack = append(this.subStack, this.stack[endIndex])}value = this.stack[0]this.stack = this.stack[:0]return value}/*** Your CQueue object will be instantiated and called as such:* obj := Constructor();* obj.AppendTail(value);* param_2 := obj.DeleteHead();*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/494709.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

应用人工智能有助心理学发展

来源&#xff1a; 中国社会科学报摘要&#xff1a;人工智能及相关技术的发展&#xff0c;为心理学研究提供了突破性的研究方法和工具&#xff1b;心理学对大脑机制的研究成果运用于人工智能领域&#xff0c;也推动着人工智能研究的进步。心理学同人工智能联系紧密&#xff0c;自…

【粉丝福利、免费领取】:1000套PPT模板、100份简历模板、硬核学习资料+PDF资料(java、python、大数据、机器学习)

目录 1、100套小编购买的简历模板&#xff08;部分截图&#xff09; 2、1000套精品PPT模板&#xff08;部分截图&#xff09; 3、大数据-学习资料&#xff08;1.3G 硬核PDF&#xff0c;官方指南&#xff09; 4、python学习全集 5、Java基础、高级和面试资料 6、大数据-行…

HDU 1142 A Walk Through the Forest dijkstra + DFS

http://acm.hdu.edu.cn/showproblem.php?pid1142 题意&#xff1a; Jimmy在位置 1 &#xff0c;每天晚上要回位置2&#xff08;家&#xff09;&#xff0c;计算1到2的最短距离&#xff0c;Jimmy要先去一个地方然后再回家&#xff0c;到了那个地方离家的距离不能大于1到2 的最短…

剑指 Offer 06. 从尾到头打印链表(递归、逆置链表、头部动态插入)

题目 输入一个链表的头节点&#xff0c;从尾到头反过来返回每个节点的值&#xff08;用数组返回&#xff09;。 示例 1&#xff1a; 输入&#xff1a;head [1,3,2] 输出&#xff1a;[2,3,1] 限制&#xff1a; 0 < 链表长度 < 10000 解法一&#xff1a;递归&#xff0…

王家耀院士 | 新型智慧城市“大脑”就是时空大数据平台

来源&#xff1a;泰伯网摘要&#xff1a;新型智慧城市建设的任务包括五点&#xff0c;首先是大力实施“互联网城市”行动&#xff1b;二要加强体制机制创新和城市资源整合&#xff1b;三要推进工业化、信息化、城镇化、农业现代化融合创新&#xff1b;四要着力解决“城市病”&a…

网站架构之缓存应用(摘录)

网站缓存这个话题并不新颖&#xff0c;但是能否将它用好&#xff0c;可是一门学问&#xff0c;同一件工具在不同人的手中会做出不同的事情来。这里我来分享总结下我对于网站架构中缓存应用的一些看法和经验&#xff0c;大家有好的想法可以补充 第一&#xff1a;缓存的一些基…

C++校招常见面试题(2019年校招总结)

总结了语法、数据结构、常见排序算法、操作系统、网络五大块常见校招面试题。欢迎补充与修正。 ★★语法知识★★ 一、C与C的区别 面向对象与面向过程的区别 面向过程 面向过程编程是就分析出解决问题题的步骤&#xff0c;然后把这些步骤一步一步的实现&#xff0c;使用的时…

3分钟了解物联网三大技术的未来争夺战!

来源&#xff1a;传感器技术摘要&#xff1a;物联网通过通信技术将人与物、物与物进行连接&#xff0c;在智能家居、工业数据采集等区域网通信场景一般采用短距离通信技术&#xff0c;对于广范围、远距离的连接则需要远距离通信技术。物联网通过通信技术将人与物、物与物进行连…

Socket一次Recv接受的字节有限制么?

答案是&#xff1a;有。大约 5-15KB &#xff0c;默认 具体 和什么有关系我也不知道。反正我测试的是&#xff1a;16371字节。win7 x64。 可以使用setSockOpt来设置 recvbuf or sndbuf 的大小&#xff0c;但是 我的建议还是控制 每次接受的字节数 控制在一定范围 比如 5KB。因为…

❤ 想知道大厂面试都问什么吗,附最强面试技巧!!(大数据开发岗)❤

作者简介 蓝桥签约作者、大数据&Python领域优质创作者。维护多个大数据技术群&#xff0c;帮助大学生就业和初级程序员解决工作难题。 我的使命与愿景&#xff1a;持续稳定输出&#xff0c;赋能中国技术社区蓬勃发展&#xff01; 粉丝福利&#xff1a;免费下载海量【PPT…

C++常见面试题(2019年校招总结)

一、C与C语言的联系 c语言是面向过程的结构化语言&#xff0c;c是面向对象的的程序设计语言&#xff0c;在c语言的基础上进行了扩充和完善&#xff0c;并且c兼容了c语言的面向过程的特点。在C中可以使用继承、多态进行面向对象的编程。 面向对象与面向过程的区别 面向过程 …

机器怎样才能有意识

来源&#xff1a;应行仁科学网博客摘要&#xff1a;意识&#xff0c;没有一个客观的科学定义&#xff0c;难以观测认定&#xff0c;但它是每个人都能主观感受到的真实。意识&#xff0c;没有一个客观的科学定义&#xff0c;难以观测认定&#xff0c;但它是每个人都能主观感受到…

OD使用教程3(下) - 调试篇03|解密系列

OD使用教程3(下) - 调试篇03 让编程改变世界 Change the world by program 逻辑运算 [caption id"attachment_706" align"aligncenter" width"358"]逻辑运算[/caption] 关于test指令 test指令格式&#xff1a;test dest, src 这个指令和…

❤『面试知识集锦100篇』1.面试技巧篇丨HR的小心思,你真的懂吗?

作者&#xff1a;不吃西红柿 简介&#xff1a;CSDN博客专家、蓝桥签约作者、大数据&Python领域优质创作者。 目录 一、企业考察要点 技巧一&#xff1a;了解自己的专业技能与 JD 中的匹配点 技巧二、把控好企业「味道」 技巧三、精彩的自我介绍 技巧四、常见问题回答…

剑指 Offer 03. 数组中重复的数字()

在一个长度为 n 的数组 nums 里的所有数字都在 0&#xff5e;n-1 的范围内。数组中某些数字是重复的&#xff0c;但不知道有几个数字重复了&#xff0c;也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 解题思路 原地交换&#xff0c;让对应的数字放在对应位置…

机器人行业发展方向预测报告

来源&#xff1a;招商证券摘要&#xff1a;随着中国人口红利消失&#xff0c;机器人不仅在制造业上正在替代工人&#xff0c;还将在军事、服务、娱乐等领域取代人类&#xff0c;“钢铁侠”已不仅仅存在于美国科幻电影中&#xff0c;而正走入我们的生活。本篇报告对机器人行业及…

在BingoCC上面解析域名实现智能路由

天朝的网络强大无人能及&#xff0c;世界上最大的Ping值不是从中国到美国而是从电信到联通。当你搭建了一个网站需要为南方北方的客户服务的话少不得你就要选择有中国特色的双线机房了。现在假如你已经把你的服务器已经部署在双线机房了&#xff0c;并且申请到了双线IP。为了让…

Hive小文件问题:如何产生、造成影响、解放办法

一、小文件是如何产生的 1.动态分区插入数据&#xff0c;产生大量的小文件&#xff0c;从而导致map数量剧增。 2.reduce数量越多&#xff0c;小文件也越多(reduce的个数和输出文件是对应的)。 3.数据源本身就包含大量的小文件。 二、小文件问题的影响 1.从Hive的角度看&…

数据结构 - 队列(图解+源码)

队列 概念 队列是一种特殊的线性表&#xff0c;特殊之处在于它遵循先入先出&#xff08;FIFO&#xff09;原则&#xff0c;只允许在表的前端&#xff08;front&#xff09;进行删除操作&#xff0c;而在表的后端&#xff08;rear&#xff09;进行插入操作&#xff0c;和栈一样…

测试人员容易遗漏一些隐藏的缺陷

通常软件测试会暴露软件中的缺陷&#xff0c;经过修正后可以保证软件系统的功能满足需求并正确运行。但是&#xff0c;在系统测试和确认测试中&#xff0c;测试人员容易遗漏一些隐藏的缺陷。众所周知&#xff0c;软件测试不可能发现所有的缺陷&#xff0c;而软件开发周期各个阶…