千家信息网

leetcode怎么用栈实现队列

发表于:2025-02-06 作者:千家信息网编辑
千家信息网最后更新 2025年02月06日,这篇文章给大家分享的是有关leetcode怎么用栈实现队列的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、题目内容请你仅使用两个栈实现先入先出队列。队列应当支持一般队列的
千家信息网最后更新 2025年02月06日leetcode怎么用栈实现队列

这篇文章给大家分享的是有关leetcode怎么用栈实现队列的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

一、题目内容

请你仅使用两个栈实现先入先出队列。队列应当支持一般队列的支持的所有操作(push、pop、peek、empty):

实现 MyQueue 类:

  • void push(int x) 将元素 x 推到队列的末尾

  • int pop() 从队列的开头移除并返回元素

  • int peek() 返回队列开头的元素

  • boolean empty() 如果队列为空,返回 true ;否则,返回 false

说明:

  • 你只能使用标准的栈操作 -- 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。

  • 你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。

进阶:

  • 你能否实现每个操作均摊时间复杂度为 O(1) 的队列?换句话说,执行 n 个操作的总时间复杂度为 O(n) ,即使其中一个操作可能花费较长时间。

示例:

输入:
["MyQueue", "push", "push", "peek", "pop", "empty"]
[[], [1], [2], [], [], []]
输出:
[null, null, null, 1, 1, false]

解释:
MyQueue myQueue = new MyQueue();
myQueue.push(1); // queue is: [1]
myQueue.push(2); // queue is: [1, 2] (leftmost is front of the queue)
myQueue.peek(); // return 1
myQueue.pop(); // return 1, queue is [2]
myQueue.empty(); // return false

提示:

1 <= x <= 9
最多调用 100 次 push、pop、peek 和 empty
假设所有操作都是有效的 (例如,一个空的队列不会调用 pop 或者 peek 操作)

二、解题思路

由于栈只能后进先出,所以可以用一个栈先按照顺序存,然后再从后往前弹出给新的栈,这样新的栈再弹出就是先进先出的顺序了。

三、代码

class MyQueue:    def __init__(self):        """        Initialize your data structure here.        """        self.sa = []        self.sb = []    def push(self, x: int) -> None:        """        Push element x to the back of queue.        """        self.sa.append(x)    def pop(self) -> int:        """        Removes the element from in front of queue and returns that element.        """        if len(self.sb) == 0:            while len(self.sa) != 0:                self.sb.append(self.sa.pop())        return self.sb.pop()    def peek(self) -> int:        """        Get the front element.        """        if len(self.sb) == 0:            while len(self.sa) != 0:                self.sb.append(self.sa.pop())        return self.sb[-1]    def empty(self) -> bool:        """        Returns whether the queue is empty.        """        return len(self.sa) == 0 and len(self.sb) == 0# Your MyQueue object will be instantiated and called as such:# obj = MyQueue()# obj.push(x)# param_2 = obj.pop()# param_3 = obj.peek()# param_4 = obj.empty()if __name__ == '__main__':    myQueue = MyQueue()    myQueue.push(1)    myQueue.push(2)    ans1 = myQueue.peek()    ans2 = myQueue.pop()    ans3 = myQueue.empty()    print(ans1, ans2, ans3)

感谢各位的阅读!关于"leetcode怎么用栈实现队列"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

队列 元素 内容 先出 支持 复杂 复杂度 开头 时间 更多 标准 篇文章 顺序 不错 合法 实用 有效 两个 也就是 代码 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 校园网络安全宣传周线上 市科技局网络安全自查总结 南海网络安全知识 软件开发助理需要什么手续 九台区品质网络技术咨询参考价格 日本语软件开发 交友软件开发费用是多少 fp数据库 select 1 服务器的配置与管理论文 服务器备份的文件里面有病毒 玛莎拉蒂服务器价格 机器人和网络安全专业哪个好 车中控屏加载服务器失败怎么回事 电信有线电视服务器连接方式 网络安全监管app 怎么做网络安全等保 杭州网络安全研究所 各学校观看网络安全宣传周直播 天津服务器迁移公司有哪些云空间 怎么做顾客数据库系统 电脑服务器端口怎么找 安美微客北京互联网科技 poi兴趣点服务器搭建 长沙企业软件开发教程 opc额服务器 企业税务管理网络安全现状 网络安全竞赛填空题及答案 数据库的域值怎么查询 oracle数据库备份集 美国对中国们网络安全威胁
0