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

leetcode232. 用栈实现队列

leetcode232. 用栈实现队列

请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(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 操作)

在这里插入图片描述

目录

  • leetcode232. 用栈实现队列
  • 题目分析
  • 算法介绍
  • 算法步骤
  • 算法代码
  • 算法流程图
  • 算法分析
  • 相似题目

题目分析

这是一个关于使用栈实现队列的算法题。题目要求实现一个队列,其主要操作包括push(入队)、pop(出队)、peek(查看队头元素)和empty(判断队列是否为空)。这里的关键在于如何使用两个栈来模拟队列的行为。

算法介绍

栈是一种后进先出(Last In First Out, LIFO)的数据结构,而队列是一种先进先出(First In First Out, FIFO)的数据结构。要使用栈来实现队列,我们需要两个栈:一个用于模拟队列的入队操作,另一个用于模拟队列的出队操作。

  • 当执行push操作时,直接将元素压入第一个栈(stIn)。
  • 当执行poppeek操作时,如果第二个栈(stOut)为空,则将第一个栈的所有元素移动到第二个栈中,然后执行相应的操作。
  • empty操作需要检查两个栈是否都为空。

算法步骤

  1. 初始化两个空栈:stInstOut
  2. push操作:将元素压入stIn
  3. pop操作:
    • 如果stOut为空,将stIn的所有元素移动到stOut
    • stOut弹出顶部元素并返回。
  4. peek操作:
    • 执行pop操作。
    • 将弹出的元素重新压入stOut
    • 返回该元素。
  5. empty操作:检查stInstOut是否都为空。

算法代码

class MyQueue {
public:stack<int> stIn;stack<int> stOut;MyQueue() {}void push(int x) {stIn.push(x);}int pop() {if(stOut.empty()){while(!stIn.empty()){stOut.push(stIn.top());stIn.pop();}}   int result=stOut.top();stOut.pop();return result;}int peek() {int res=this->pop();stOut.push(res);return res;}bool empty() {return stIn.empty() && stOut.empty();}
};/*** Your MyQueue object will be instantiated and called as such:* MyQueue* obj = new MyQueue();* obj->push(x);* int param_2 = obj->pop();* int param_3 = obj->peek();* bool param_4 = obj->empty();*/

算法流程图

push
pop
peek
empty
开始
初始化两个空栈 stIn 和 stOut
操作类型
stIn.push x
stOut 是否为空
将 stIn 所有元素移动到 stOut
stOut.pop
执行 pop 操作
将弹出的元素重新压入 stOut
返回弹出元素
检查 stIn 和 stOut 是否都为空
返回检查结果
结束

算法分析

  • 时间复杂度
    • push操作:O(1)。
    • poppeek操作:最坏情况下(当stOut为空时)需要将所有元素从stIn转移到stOut,时间复杂度为O(n)。
    • empty操作:O(1)。
  • 空间复杂度:O(n),其中n是队列中的元素数量。
  • 易错点
    • pop操作中,确保在stOut为空时才移动stIn中的元素。
    • peek操作中,弹出元素后需要将其再次压入stOut

相似题目

题目链接
用队列实现栈LeetCode 225
最小值栈LeetCode 155
栈的压入、弹出序列LeetCode 946

请注意,以上表格仅为示例,实际链接可能需要根据具体平台和题目编号进行调整。

相关文章:

leetcode232. 用栈实现队列

leetcode232. 用栈实现队列 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; 实现 MyQueue 类&#xff1a; void push(int x) 将元素 x 推到队列的末尾 int pop() 从队列的开头移除并返回元…...

智慧火灾应急救援航拍检测数据集(无人机视角)

智慧火灾应急救援。 无人机&#xff0c;直升机等航拍视角下火灾应急救援检测数据集&#xff0c;数据分别标注了火&#xff0c;人&#xff0c;车辆这三个要素内容&#xff0c;29810张高清航拍影像&#xff0c;共31GB&#xff0c;适合森林防火&#xff0c;应急救援等方向的学术研…...

eureka.client.service-url.defaultZone的坑

错误的配置 eureka: client: service-url: default-zone: http://192.168.100.10:8080/eureka正确的配置 eureka: client: service-url: defaultZone: http://192.168.100.10:8080/eureka根据错误日志堆栈打断电调试 出现两个key&#xff0c;也就是defaultZone不支持snake-c…...

统信服务器操作系统【d版字符系统升级到dde图形化】配置方法

统信服务器操作系统d版本上由字符系统升级到 dde 桌面系统的过程 文章目录 一、准备环境二、功能描述安装步骤1. lightdm 安装2. dde 安装 一、准备环境 适用版本&#xff1a;■UOS服务器操作系统d版 适用架构&#xff1a;■ARM64、AMD64、MIPS64 网络&#xff1a;连接互联网…...

学习IEC 62055付费系统标准

1.IEC 62055 国际标准 IEC 62055 是目前关于付费系统的唯一国际标准&#xff0c;涵盖了付费系统、CIS 用户信息系统、售电系统、传输介质、数据传输标准、预付费电能表以及接口标准等内容。 IEC 62055-21 标准化架构IEC 62055-31 1 级和 2 级有功预付费电能表IEC 62055-41 STS…...

如何在Markdown写文章上传到wordpress保证图片不丢失

如何在Markdown写文章上传到wordpress保证图片不丢失 写文日期,2023-11-16 引文 众所周知markdown是一款nb的笔记软件&#xff0c;本篇文章讲解如何在markdown编写文件后上传至wordpress论坛。并且保证图片不丢失&#xff08;将图片上传至云端而非本地方法&#xff09; 一&…...

html,css基础知识点笔记(二)

9.18&#xff08;二&#xff09; 本文主要教列表的样式设计 1&#xff09;文本溢出 效果图 文字限制一行显示几个字&#xff0c;多余打点 line-height: 1.8em; white-space: nowrap; width: 40em; overflow: hidden; text-overflow: ellipsis;em表示一个文字的大小单位&…...

(k8s)kubernetes 部署Promehteus学习之路

整个Prometheus生态包含多个组件&#xff0c;除了Prometheus server组件其余都是可选的 Prometheus Server&#xff1a;主要的核心组件&#xff0c;用来收集和存储时间序列数据。 Client Library:&#xff1a;客户端库&#xff0c;为需要监控的服务生成相应的 metrics 并暴露给…...

初写MySQL四张表:(3/4)

我们已经完成了四张表的创建&#xff0c;学会了创建表和查看表字段信息的语句。 初写MySQL四张表:(1/4)-CSDN博客 初写MySQL四张表:(2/4)-CSDN博客 接下来&#xff0c;我们来学点对数据的操作&#xff1a;增 删 查&#xff08;一部分&#xff09;改 先来看这四张表以及相关…...

【Java】线程暂停比拼:wait() 和 sleep()的较量

欢迎浏览高耳机的博客 希望我们彼此都有更好的收获 感谢三连支持&#xff01; 在Java多线程编程中&#xff0c;合理地控制线程的执行是至关重要的。wait()和sleep()是两个常用的方法&#xff0c;它们都可以用来暂停线程的执行&#xff0c;但它们之间存在着显著的差异。本文将详…...

CQRS模型解析

简介 CQRS中文意思为命令于查询职责分离&#xff0c;我们可以将其了解成读写分离的思想。分为两个部分 业务侧和数据侧&#xff0c;业务侧主要执行的就是数据的写操作&#xff0c;而数据侧主要执行的就是数据的读操作。当然两侧的数据库可以是不同的。目前最为常用的CQRS思想方…...

qt-C++笔记之作用等同的宏和关键字

qt-C笔记之作用等同的宏和关键字 code review! Q_SLOT 和 slots&#xff1a; Q_SLOT是slots的替代宏&#xff0c;用于声明槽函数。 Q_SIGNAL 和 signals&#xff1a; Q_SIGNAL类似于signals&#xff0c;用于声明信号。 Q_EMIT 和 emit&#xff1a; Q_EMIT 是 Qt 中用于发射…...

java(3)数组的定义与使用

目录 1.前言 2.正文 2.1数组的概念 2.2数组的创建与初始化 2.2.1数组的创建 2.2.1数组的静态初始化 2.2.2数组的动态初始化 2.3数组是引用类型 2.3.1引用类型与基本类型区别 2.3.2认识NULL 2.4二维数组 2.5数组的基本运用 2.5.1数组的遍历 2.5.2数组转字符串 2.…...

Integer 源码记录

Integer 公共方法结构 注意&#xff1a; 通过构造函数创建一个Integer对象&#xff0c;每次都会返回一个新的对象&#xff0c;如果使用 进行对象的比较&#xff0c;那么结果是false。 public Integer(int value) {this.value value;}与之对应的是&#xff0c;valueOf 方法…...

【RocketMQ】一、基本概念

文章目录 1、举例2、MQ异步通信3、背景4、Rocket MQ 角色概述4.1 主题4.2 队列4.3 消息4.4 生产者4.5 消费者分组4.6 消费者4.7 订阅关系 5、消息传输模型5.1 点对点模型5.2 发布订阅模型 1、举例 以坐火车类比MQ&#xff1a; 安检大厅就像是一个系统的门面&#xff0c;接受来…...

笔记9.18

线程之间的通信是指在多线程程序中&#xff0c;不同线程之间如何交换数据或协调工作。这种通信对于实现复杂的并发程序是至关重要的。以下是几种常见的线程间通信方式&#xff1a; 共享内存&#xff1a; 这是最直接的方式&#xff0c;多个线程通过读写同一块内存区域&#xff0…...

时间序列8个基准Baseline模型及其详细解读

我是从去年11月份开始&#xff0c;选定时间序列预测这个方向&#xff0c;准备在工作之余继续独立进行一些科学研究。选定这个方向是因为我对金融量化一直挺感兴趣&#xff0c;希望能把时间序列中的深度学习算法模型&#xff0c;用到金融数据。现在看来&#xff0c;我太过于理想…...

将相机深度图转接为点云的ROS2功能包

depth_image_proc 是一个 ROS&#xff08;Robot Operating System&#xff09;包&#xff0c;它包含了一系列节点&#xff0c;用于处理来自深度相机的图像数据&#xff0c;并将其转换为点云。以下是 depth_image_proc 包中各个节点的作用&#xff1a; convert_metric_node&…...

计算机毕业设计选题推荐-共享图书管理系统-小程序/App

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…...

架构师:在 Spring Cloud 中实现全局异常处理的技术指南

1、简述 在分布式系统中,微服务架构是最流行的设计模式之一。Spring Cloud 提供了各种工具和库来简化微服务的开发和管理。然而,随着服务的增多,处理每个服务中的异常变得尤为复杂。因此,实现统一的全局异常处理成为了关键。本篇博客将介绍如何在 Spring Cloud 微服务架构…...

Vibe Vibe 测试自动化:如何用AI帮你写测试代码,保证项目质量

Vibe Vibe 测试自动化&#xff1a;如何用AI帮你写测试代码&#xff0c;保证项目质量 【免费下载链接】vibe-vibe The First Systematic Vibe Coding Open-Source Tutorial | From Zero to Full-Stack, Empowering Everyone to Build Products with AI | Live at: www.vibevibe.…...

AArch64 TRCCNTCTLR寄存器详解与调试技巧

1. AArch64 TRCCNTCTLR寄存器概述在AArch64架构中&#xff0c;TRCCNTCTLR&#xff08;Trace Counter Control Register&#xff09;是嵌入式跟踪扩展&#xff08;FEAT_ETE&#xff09;功能的重要组成部分。作为系统调试和性能分析的核心组件&#xff0c;它负责控制跟踪计数器的…...

Appium环境搭建实战手册:解决JDK、Android SDK与Node.js兼容性问题

1. 为什么Appium环境搭建总让人卡在第一步&#xff1f;——不是工具不行&#xff0c;是路径没走对“Appium环境搭好了吗&#xff1f;”这句话我过去三年在测试团队晨会里至少听过27次。不是新人问的&#xff0c;是干了五年自动化测试的老同事皱着眉甩出来的。他刚重装系统&…...

Chrome无痕模式下BiDi协议断连原因与解决方案

1. 这个问题不是“能不能用”&#xff0c;而是“为什么一开无痕就断连”如果你在用 Selenium 4.11 集成 Chrome DevTools Protocol&#xff08;CDP&#xff09;或更新的 BiDi&#xff08;Browser Interaction&#xff09;协议做自动化时&#xff0c;突然发现&#xff1a;本地调…...

实用购机指南:屏幕出色、流畅耐用续航拉满的手机

一、前言2026 年上半年&#xff0c;智能手机市场迎来新一轮旗舰迭代&#xff0c;用户购机核心需求已从单一参数比拼&#xff0c;转向流畅不卡顿、性能强劲、屏幕护眼优质、续航持久耐用的全能体验&#xff0c;同时兼顾影像创作与美学设计。为帮消费者精准筛选高适配机型&#x…...

别再死记硬背公式了!用Matlab Robotics Toolbox玩转机器人姿态(旋转矩阵/欧拉角/四元数互转)

用Matlab Robotics Toolbox解锁机器人姿态转换的实战密码 在机器人学和计算机视觉领域&#xff0c;姿态表示就像工程师的第二语言。但当我们面对旋转矩阵、欧拉角和四元数这三种"方言"时&#xff0c;很多人会陷入公式记忆的泥潭。实际上&#xff0c;理解它们之间的关…...

香橙派Zero3无屏幕配网新玩法:用ESP32-C3蓝牙模块搞定WiFi连接(附完整代码)

香橙派Zero3无屏幕配网新玩法&#xff1a;用ESP32-C3蓝牙模块搞定WiFi连接&#xff08;附完整代码&#xff09; 在物联网和边缘计算项目中&#xff0c;无头设备&#xff08;Headless Device&#xff09;的网络配置一直是个棘手问题。想象一下&#xff1a;你刚拿到一块香橙派Zer…...

仅限前500名设计师获取:Midjourney布料质感参数黄金比例表(含棉/丝/涤纶/羊绒/灯芯绒/牛仔布6大基材ISO 105-X12标准映射值)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney布料质感模拟的底层逻辑与设计哲学 Midjourney 并非传统三维渲染引擎&#xff0c;其布料质感生成本质上是基于大规模图像-文本对齐模型&#xff08;CLIP-guided diffusion&#xff09;的跨模…...

影刀RPA 企业级专题篇:自动化中台架构与多业务流程治理实践

影刀RPA 企业级专题篇&#xff1a;自动化中台架构与多业务流程治理实践 作者&#xff1a;林焱 很多团队最开始做自动化。 目标都很简单。 让流程跑起来。 减少重复操作。 前期。 几个流程。 几台机器。 一个维护人员。 系统看起来非常轻。 但随着业务扩大。 问题会…...

【与我学 ClaudeCode】规划与协调篇 之 Skills:按需加载的领域知识框架

作者&#xff1a;逆境不可逃 技术永无止境 希望我的内容可以帮助到你&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 大家吼 ! 我是 逆境不可逃 今天给大家带来文章《【与我学 ClaudeCode】规划与协调篇 之 Skills&#xff1a;按需加载的领域知识框架》. Lea…...