当前位置: 首页 > news >正文

LeetCode-232. 用栈实现队列【栈 设计 队列】

LeetCode-232. 用栈实现队列【栈 设计 队列】

  • 题目描述:
  • 解题思路一:用列表简单实现。
  • 解题思路二:用栈的话就是两个列表,一个输入栈,一个输出栈,来模拟队列。
  • 解题思路三:

题目描述:

请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(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(双端队列)来模拟一个栈,只要是标准的栈操作即可。

示例 1:
输入:
[“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 操作)

进阶:

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

解题思路一:用列表简单实现。

class MyQueue:def __init__(self):self.stack = []def push(self, x: int) -> None:self.stack.append(x)def pop(self) -> int:return self.stack.pop(0)def peek(self) -> int:return self.stack[0]def empty(self) -> bool:return not self.stack# 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()

时间复杂度:O(n)
空间复杂度:O(n)

解题思路二:用栈的话就是两个列表,一个输入栈,一个输出栈,来模拟队列。

class MyQueue(object):def __init__(self):self.stack1 = []self.stack2 = []def push(self, x):self.stack1.append(x)def pop(self):if not self.stack2:while self.stack1:self.stack2.append(self.stack1.pop())return self.stack2.pop()def peek(self):if not self.stack2:while self.stack1:self.stack2.append(self.stack1.pop())return self.stack2[-1]def empty(self):return not self.stack1 and not self.stack2

时间复杂度:O(n)
空间复杂度:O(n)

解题思路三:


时间复杂度:O(n)
空间复杂度:O(n)

相关文章:

  • 【起草】【第九章】ChatGPT 在文旅主题乐园的应用
  • 面向遥感图像的道路区域提取及优化
  • 关于多重背包的笔记
  • 【C语言】实战项目——通讯录
  • 用python编写九九乘法表
  • 【复杂网络分析与可视化】——通过CSV文件导入Gephi进行社交网络可视化
  • 计算机网络技术的应用探讨
  • 多线程 (上) - 学习笔记
  • 文件函数的简单介绍
  • 加密的艺术:对称加密的奇妙之处(下)
  • 04-Nacos中负载均衡规则的配置
  • 计算机网络:网络层(无分类编址CIDR、计算题讲解)
  • 亿赛通电子文档安全管理系统 SQL注入漏洞复现
  • 分布式块存储 ZBS 的自主研发之旅|元数据管理
  • 深度学习项目部署:解析 NVIDIA Docker 中的 CUDA 镜像版本:base 版本、 runtime 版本、devel 版本
  • 分享的文章《人生如棋》
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • 2019年如何成为全栈工程师?
  • 5、React组件事件详解
  • Apache的基本使用
  • django开发-定时任务的使用
  • emacs初体验
  • Fundebug计费标准解释:事件数是如何定义的?
  • quasar-framework cnodejs社区
  • React Transition Group -- Transition 组件
  • Redis字符串类型内部编码剖析
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 设计模式(12)迭代器模式(讲解+应用)
  • 仓管云——企业云erp功能有哪些?
  • 如何正确理解,内页权重高于首页?
  • ###C语言程序设计-----C语言学习(6)#
  • #vue3 实现前端下载excel文件模板功能
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (强烈推荐)移动端音视频从零到上手(下)
  • (一) springboot详细介绍
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • (转载)hibernate缓存
  • (状压dp)uva 10817 Headmaster's Headache
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • @require_PUTNameError: name ‘require_PUT‘ is not defined 解决方法
  • [【JSON2WEB】 13 基于REST2SQL 和 Amis 的 SQL 查询分析器
  • [AIGC] Spring Interceptor 拦截器详解
  • [android] 请求码和结果码的作用
  • [BeginCTF]真龙之力
  • [Django开源学习 1]django-vue-admin
  • [js] 正则表达式
  • [LeetCode] Ransom Note 赎金条
  • [ruby on rails] ruby使用vscode做开发
  • [Silverlight]通过MVVM模式实现本地化/全球化(1)
  • [svc]对称加密/非对称加密细枝末节-如何做到数据传输的authentication/data integrity/confidentiality(私密)...
  • [SystemC]SystemC中的模块和程序