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

思路

因为队列为先进先出。而栈为先进后出,顺序刚好相反。那么我们只需要准备两个栈,s1和s2。
将数据分别通过栈s1和s2.即可做到先进先出。

但需要注意的是,因为可能连续push多个数,pop一次,然后继续push多个数。那么就形成了连续的段1和连续的段2。我们将段1放入s2后。需要先将此时s2的栈顶返回,才是我们想要pop的数,然后再继续放入段2。如果是将段1和段2都放入s2时再返回s2的栈顶,不会是我们想要pop的数。因为此时s2中只是段间符合队列的顺序,但段与段之间不符合队列的顺序。

同时我们也因为push的不连续性和push时先都将数只缓存在s1的操作,只有在查询队列队头或者弹出队头时才涉及s2的操作,导致s1和s2都是有可能为空的。我们要判断整个队列是否为空,需要看s1和s2是否同时为空。
①s1为空,s2不为空的情况:s1的数已经全部赋给s2了。此时s2就是队列。
②s2为空,s1不为空的情况:正在连续push数中,s1此时为队列的逆序顺序。

代码

class MyQueue {Stack<Integer> s1 = new Stack<Integer>();Stack<Integer> s2 = new Stack<Integer>();public MyQueue() {}public void push(int x) {s1.push(x);}public int pop() {if(s2.empty()){while(!s1.empty()){s2.push(s1.peek());s1.pop();}}int ans = (int)s2.peek();s2.pop();return ans;}public int peek() {if(s2.empty()){while(!s1.empty()){s2.push(s1.peek());s1.pop();}}return s2.peek();}public boolean empty() {return s1.empty()&&s2.empty();}
}*/

效率

0ms,击败100.00%使用 Java 的用户。应该不用再优化了。

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

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

相关文章

智跃人力资源管理系统GenerateEntityFromTable.aspx接口存在SQL注入漏洞 附POC

@[toc] 智跃人力资源管理系统GenerateEntityFromTable.aspx接口存在SQL注入漏洞 附POC 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者…

别再争国漫一哥了,真正的王者回来了!

相信很多漫迷都知道&#xff0c;《斗罗大陆》动画在播出的五年期间一直稳稳占领国漫各榜单第一的位置。现在它已经完结了大半年&#xff0c;尽管《斗破苍穹》《完美世界》等动画都在争国漫一哥&#xff0c;但排名总是上下浮动&#xff0c;没有定论。 但就在今天&#xff0c;《斗…

用GPT4.0对csdn问答社区内容进行总结的对话记录(20231203号)

问题链接&#xff1a;微信小游戏开发2D碰撞检测问题 问题内容&#xff1a; 用户在开发微信小游戏的2D项目时遇到了碰撞检测无效的问题。他们尝试使用其他的碰撞类&#xff0c;但在2D中会报错。用户怀疑微信小游戏的框架可能不支持2D碰撞检测&#xff0c;或者需要自己计算和编…

flink获取kafka的key value timestamp header

参考&#xff1a; http://t.csdnimg.cn/FvqEn

JUC-AQS

如何利用CAS实现一个同步框架 state&#xff1a;共享标记位。利用CAS修改&#xff0c;达到同步管理等待队列&#xff1a;存储需要等待获取锁的线程 共享标记位state0 表示资源是空闲的&#xff1b;state1表示有1个线程获取到资源&#xff0c;如何独占模式&#xff0c;判断持有…

一款充电桩解决方案设计

一、基本的概述 项目由IP6536提供两路5V 1.5A 的USB充电口&#xff0c;IP6505提供一路最大24W的USB快充口支持QC3.0 / DCP / QC2.0 / MTK PE1.1 / PE2.0 / FCP / SCP / AFC / SFCP的快充协议&#xff0c;电池充电由type-C输入经过IP2326输出最高15W快充对电池进行充电&#xf…

C++:异常

文章目录 传统的处理错误的方式C异常C异常的使用抛异常的举例异常的重新抛出异常规范 自定义异常体系C标准库中的异常体系异常的优缺点 本篇总结的是C中关于异常的内容 传统的处理错误的方式 在C语言中&#xff0c;对于传统的错误方式有 终止程序&#xff1a;例如assert&…

上海市计算机学会竞赛2023年11月月赛丙组

1.刷题 #include<iostream> using namespace std; int main(){int n,m,a;cin>>n>>m;if(n%m!0){an/m1;}if(n%m0){an/m;}cout<<a; } 2.染色 #include<iostream> #include<algorithm> using namespace std; long long a[300010]; int main…

【STL】手撕 string类

目录 1&#xff0c;string类框架 2&#xff0c;string&#xff08;构造&#xff09; 3&#xff0c;~string&#xff08;析构&#xff09; 4&#xff0c;swap&#xff08;交换&#xff09; 5&#xff0c;string&#xff08;拷贝构造&#xff09; 1&#xff0c;常规法 2&a…

pythonanywhere 介绍

最近因为工作需要用到类似Azure Function App的服务&#xff0c;不过Azure Function App服务需要购买Azure VM&#xff0c;不是免费的。在stackoverflow上刚好看到有人提到pythonanywhere提供类似Azure Function App的服务&#xff0c;而且可以免费使用三个月。 首先申请一个免…

Cmkae外部依赖管理

文章目录 一、cmake依赖管理介绍二、源码依管理1. FetchContent与find_package进行集成 2. CPM3. git submodule附加&#xff1a; address_sanitizer 和 undefined sanitizer 一、cmake依赖管理介绍 CMake 是跨平台的构建系统&#xff0c;支持 C/C、Objective-C、Fortran 等多种…

Git Bash环境下用perl脚本获取uuid值

在Linux环境下&#xff0c;比如在ubuntu就直接有uuidgen命令直接获取uuid值。在Windows环境下常用的git bash中没有对应的命令&#xff0c;略有不便。这里用脚本写一个uuidgen&#xff0c;模拟Linux环境下的uuidgen命令。 #! /usr/bin/perl use v5.14; use Win32;sub uuidGen {…

6-13连接两个字符串

#include<stdio.h> int main(){int i0,j0;char s1[222],s2[333];printf("请输入第一个字符串&#xff1a;\n");gets(s1);//scanf("%s",s1);printf("请输入第二个字符串&#xff1a;\n");gets(s2);while(s1[i]!\0)i;while(s2[j]!\0)s1[i]s2…

1.1卷积的作用

上图解释了1∗1卷积如何适用于尺寸为H∗W∗D的输入层&#xff0c;滤波器大小为1∗1∗D&#xff0c;输出通道的尺寸为H∗W∗1。如果应用n个这样的滤波器&#xff0c;然后组合在一起&#xff0c;得到的输出层大小为H∗W∗n。 1.1∗1卷积的作用 调节通道数 由于 11 卷积并不会改…

webpack查找配置文件的策略

Webpack 在执行时会按照一定的策略来查找配置文件。以下是它查找配置文件的基本流程&#xff1a; 1.命令行指定&#xff1a; 如果在运行 Webpack 时通过 --config 或 -c 参数指定了配置文件的路径&#xff0c;那么 Webpack 将使用这个指定的配置文件。 2.默认查找顺序&…

Java研学-反射与内省

一 反射机制 1 含义 通过指定类的字节码文件获取对应的字节码对象;通过该对象调用类中的成员 2 获取类的真实类型的方式 ① 正射机制 – new关键字实例化对象 // Animal类 public class Animal{private String name;private int kg;...... }// 实例化对象 public class Tes…

程序员日常使用Shell命令:提高工作效率的实用技巧

作为程序员&#xff0c;我们每天都在与代码和工具打交道。其中&#xff0c;Shell是一个非常重要的工具&#xff0c;它可以帮助我们高效地完成各种任务。本文将列举一些程序员日常使用Shell提高效率的操作&#xff0c;帮助大家更好地利用Shell提高工作效率。 首先&#xff0c;让…

[递归] 平衡矩阵

平衡矩阵 题目描述 现在有一个n阶正整数方阵&#xff08;n<7&#xff09;&#xff0c;现在可以对矩阵的任意一行进行左移&#xff0c;具体操作为&#xff1a;每次对于某一行a_i1,a_i2,…,a_in进行一次左移&#xff0c;最左边的元素移动到这一行的末尾&#xff0c;其他元素…

LinuxBasicsForHackers笔记 --文本处理

查看文件 head <file name> – 如果只想查看文件的开头部分&#xff0c;可以使用 head 命令。默认情况下&#xff0c;此命令显示文件的前10行。如果您想查看多于或少于默认的 10 行的内容&#xff0c;请在 head 命令之后、文件名之前使用破折号 (-) 开关输入所需的数量。…

springboot centos集成 OpenOffice 实现 在线预览 doc excel docx 成pdf的 并且包含中文包和英文包和安装

我的资源里面有 springboot linux 集成 OpenOffice 实现在线预览 docx doc excel img等功能&#xff0c; 报问题 &#xff1a;no suitable windowing system found, exiting. 解决方案 yum groupinstall "X Window System"如果还是报这个错 执行 yum groupinstall …