[力扣] 剑指 Offer 第一天 - 用两个栈实现队列
耐心和持久胜过激烈和狂热。
题目来源
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题目描述
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 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]
题目分析
题目中提到栈和队列,栈的特点是后进先出,队列的特点是先进先出。根据题意,可以定义两个栈,分别为输入栈和输出栈,输入栈负责保存 appendTail 所传入的值,输出栈负责输出 deleteHead 所返回的值
解题思路
对于入队
appendTail
方法,只需将元素压入输入栈即可对于出队
deleteHead
方法根据题意,首先判断输入栈和输出栈是否都为空,条件成立则返回
-1
如果上面的条件不成立,判断输出栈是否为空,不为空则直接出队;否则先将输入栈里的元素压入输出栈,再出队
代码实现
执行结果
复杂度分析
时间复杂度:appendTail
为 O(1),deleteHead
最坏的情况下为 O(N),输出栈需要遍历输入栈获取元素
空间复杂度:O(N),最坏情况下输入栈和输出栈一共存储 N 个元素
总结
以上是本人的解法,如果对你有帮助,欢迎点赞收藏加关注,如果有错误的地方,欢迎指正!
版权声明: 本文为 InfoQ 作者【陈明勇】的原创文章。
原文链接:【http://xie.infoq.cn/article/67048c50c5323b104471934e7】。文章转载请联系作者。
评论