Leetcode NO.232 Implement Queue Using Stacks 使用栈实现队列

如何使用apifox打包测试用例生成测试套件自动化执行 使用apifox打包测试用例生成测试套件自动化执行 阅读详情

1.问题描述

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

2.测试用例

示例 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

3.提示

  • 1 <= x <= 9

  • 最多调用 100 次 push、pop、peek 和 empty

  • 假设所有操作都是有效的 (例如,一个空的队列不会调用 pop 或者 peek 操作)

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

4.代码

1.入队反转
code
public class MyQueueWithInputReverse {

    private Stack<Integer> st1;
    private Stack<Integer> st2;

    public MyQueueWithInputReverse() {
        st1 = new Stack<>();
        st2 = new Stack<>();
    }

    public void push(int x) {
        while (!st1.isEmpty()) {
            st2.push(st1.pop());
        }
        st1.push(x);
        while (!st2.isEmpty()) {
            st1.push(st2.pop());
        }
    }

    public int pop() {
        return st1.pop();
    }

    public int peek() {
        return st1.peek();
    }

    public boolean empty() {
        return st1.isEmpty();
    }
}
复杂度
1.push()
     * 时间复杂度:O(n)
     * 空间复杂度:O(n)
2.pop()
	 * 时间复杂度:O(1)
     * 空间复杂度:O(1)
3.peek()
     * 时间复杂度:O(1)
     * 空间复杂度:O(1)
4.empty()
     * 时间复杂度:O(1)
     * 空间复杂度:O(1)
2.出队反转
code
public class MyQueueWithOutputReverse {

    private Stack<Integer> st1;
    private Stack<Integer> st2;

    public MyQueueWithOutputReverse() {
        st1 = new Stack<>();
        st2 = new Stack<>();
    }

    public void push(int x) {
        st1.push(x);
    }

    public int pop() {
        if (!st2.isEmpty()) {
            return st2.pop();
        } else {
            while (!st1.isEmpty()) {
                st2.push(st1.pop());
            }
            return st2.pop();
        }
    }

    public int peek() {
        if (!st2.isEmpty()) {
            return st2.peek();
        } else {
            while (!st1.isEmpty()) {
                st2.push(st1.pop());
            }
            return st2.peek();
        }
    }

    public boolean empty() {
        return st1.isEmpty() && st2.isEmpty();
    }
}
复杂度
1.push()
     * 时间复杂度:O(1)
     * 空间复杂度:O(n)
2.pop()
	 * 时间复杂度:O(n)
     * 空间复杂度:O(1)
3.peek()
     * 时间复杂度:O(1)
     * 空间复杂度:O(1)
4.empty()
     * 时间复杂度:O(1)
     * 空间复杂度:O(1)
YOLOv12涨点优化:自研检测头 | 独家创新(Partial_C_v12Detect)检测头结构创新,实现涨点 现有12Detect进行二次创新,提升检测精度,独家创新(Partial_C_12Detect)检测头结构创新,适合科研创新度十足,强烈推荐 阅读详情

相关推荐

SAP ABAP实战:手把手教你用BAPI_BILLINGDOC_CREATEMULTIPLE批量开票(附完整代码与避坑指南)

本文详细解析了SAP ABAP中BAPI_BILLINGDOC_CREATEMULTIPLE批量开票的全流程,包括参数配置、事务控制、错误处理及性能优化。通过实战案例和完整代码示例,帮助开发者高效处理大批量发票生成任务,避免常见陷阱,提升开发效率。

weixin_34101914的博客 266

力扣232-用栈实现队列(C++,附思路)

二刷过了才敢过来写… 第一遍是真不会。 思路: 首先这个题的意思是只能用栈,所以不考虑用数组了。 栈是只能知道最后一个进栈的元素,而且没有迭代器可以访问内部元素;而队列相反,是只能知道头部的元素。所以只有一个栈肯定不行,又因为不用数组,所以先想到的是:能不能设几个临时变量来周转腾挪,尽量减少空间的使用,但是又一想,如果先来99个push,再pop,那根本无从控制临时变量的个数,故放弃用临时变量来完成top之类的操作。这样就只能选择再开一个辅助栈来控制了,这样就定下一主一副两个栈,分别记为s1, s..

qq_54416938的博客 487

特征选择(模型输入参数的分析选择)方法汇总

特征选择是模式识别和机器学习领域的重要研究课题之一。为了提高准确率, 人们往往最大限度地提取特征信息。然而, 过大的特征向量维数不仅导致计算成本的增加, 复杂运算也随之带来分类识别率的下降。因此, 通过合适的特征选择算法, 去除无关特征和冗余特征, 获得有助于分类的最优特征子集, 对提高识别性能和降低计算成本具有重要意义。 特征选择主要有两个功能: 减少特征数量、降维,使模型泛化能力更强,减少过拟合 增强对特征和特征值之间的理解 参考资料: 优快云《几种常用的特征选择方法》 知乎《机器学习中,.

David's Tweet 1万+

力扣 232. 用栈实现队列 C++

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

ganlanA的博客 626

数据库迁移策略实战:MySQL到PostgreSQL

数据库迁移是一项复杂且细致的任务,需要充分的准备工作、合适的迁移策略和严格的验证与优化步骤。通过选择合适的迁移工具、进行手动迁移和应用程序适配、以及迁移后的验证与优化,可以确保数据迁移的成功和业务的连续性。希望本文的分享能够为大家在MySQL到PostgreSQL的数据库迁移实战中提供一些有用的参考和启示。

shejizuopin的博客 1732

逆向拼多多长连接:Frida+Python协议还原实战

长连接是现代移动App实现低延迟、高并发通信的核心技术,其原理在于复用TCP通道避免HTTP频繁建连开销,并通过自定义二进制协议提升传输效率与安全性。在电商场景中,长连接不仅承载业务数据,更集成了动态密钥协商、设备指纹绑定、应用层加密等多重防护机制,显著提升数据窃取与自动化采集难度。本文聚焦真实商业级长连接逆向工程,以拼多多(PDD)v12.86.0为案例,详解如何利用Frida在JNI层精准Hook encrypt/decrypt函数捕获明文,结合Python构建协议解析器与会话管理器,实现对商品详情(I

weixin_30843121的博客 1117

LeetCode 232: Implement Queue using Stacks

Implement the following operations of a queue using stacks. push(x) -- Push element x to the back of queue.pop() -- Removes the element from in front of queue.peek() -- Get the front element.empty(

哈哈的个人专栏 5329

Qwen-Image-2.1本地图像生成整合包:8G显存一键部署指南

文生图模型是AI视觉创作的核心技术,其本地化部署需兼顾模型能力、硬件适配与工程易用性。Qwen-Image-2.1作为支持文本生成、图像编辑与多图参考的统一架构模型,突破了传统Diffusion模型在消费级显卡上的运行瓶颈。通过AWQ量化、vLLM推理优化与ComfyUI节点重构,实现8G显存稳定运行,显著降低CUDA环境配置复杂度。该方案面向设计师、教师与普通用户,提供开箱即用的本地AI图像工作流,适用于电商主图迭代、教学配图生成与IP角色延展等真实场景,让高质量图像生成真正走出云端,落地桌面。

weixin_29082143的博客 398

leetcode 232:Implement Queue using Stacks

leetcode 232:Implement Queue using Stacks python java c++

西施豆腐渣 8203

从零搭建高通8255车载开发环境:QNX SDP、SDK配置与镜像编译全流程

本文详细介绍了如何从零搭建高通SA8255P车载开发环境,涵盖QNX SDP部署、SDK工具链配置到多系统镜像编译的全流程。特别针对SAIL安全岛镜像构建、QNX系统优化及Android系统资源分配等关键技术点提供实战指导,帮助开发团队高效完成车载系统开发与调试。

weixin_33582311的博客 364

LabVIEW新手必看:5分钟搞定S7-1200 OPC通信(附完整配置截图)

本文详细介绍了LabVIEW与西门子S7-1200 PLC通过OPC通信实现工业监控系统的完整配置流程。从环境准备、PLC数据块配置到OPC Server高级设置,逐步指导新手快速建立稳定通信链路,并分享工业级应用的优化技巧和异常处理方案,帮助用户提升自动化系统集成效率。

rl6adventurer的博客 641

LeetCode232 Implement Queue using Stacks Java 题解

题目: Implement the following operations of a queue using stacks. push(x) -- Push element x to the back of queue.pop() -- Removes the element from in front of queue.peek() -- Get the front eleme

u012249528的专栏 3088

速腾RS-LiDAR-16激光雷达ROS配置全攻略:从硬件连接到Rviz点云可视化

本文详细介绍了速腾RS-LiDAR-16激光雷达在ROS环境中的配置与使用全攻略,涵盖硬件连接、网络配置、ROS驱动安装及Rviz点云可视化等关键步骤。通过实战案例和技术解析,帮助开发者快速实现激光雷达数据采集与处理,提升机器人感知系统的部署效率。

ooo22的博客 249

Leetcode_232_Implement Queue using Stacks

本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/48392363 Implement the following operations of a queue using stacks. push(x) -- Push element x to the back of queue.pop

皮斯特劳沃 2253

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

闯关leetcode——232. Implement Queue using Stacks

它要求使用两个栈表达出队列的操作。

方亮的专栏 1003

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

LeetCode 232 Implement Queue using Stacks(用栈来实现队列)(*)

翻译用栈来实现队列的下列操作。push(x) —— 将元素x写入到队列的尾部 pop() —— 从队列首部移除元素 peek() —— 返回队列首部元素 empty() —— 返回队列是否为空注意:你必须使用一个只有标准操作的栈。也就是说,只有push/pop/size/empty等操作是有效的。栈可能不被原生支持,这取决于你所用的语言。只要你只是用stack的标准操作,你可以用list或者dequ

nomasp 3847

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【LeetCode OJ 232】Implement Queue using Stacks

题目链接:https://leetcode.com/problems/implement-queue-using-stacks/ 题目:Implement the following operations of a queue using stacks. push(x) -- Push element x to the back of queue.pop() -- Removes the

1312

LeetCode //C - 232. Implement Queue using Stacks

【代码】LeetCode //C - 232. Implement Queue using Stacks。

Made in Code 1162

LeetCode 232. Implement Queue using Stacks--用2个栈来实现一个队列--C++解法

LeetCode 232. Implement Queue using Stacks–C++解法 LeetCode题解专栏:LeetCode题解 我做的所有的LeetCode的题目都放在这个专栏里,大部分题目Java和Python的解法都有。 题目地址:Implement Queue using Stacks - LeetCode Implement the following operat...

个人博客 497

使用栈实现队列(LeetCode 232. Implement Queue using Stacks)

题目描述 使用栈实现队列的下列操作: push(x) – 将一个元素放入队列的尾部。 pop() – 从队列首部移除元素。 peek() – 返回队列首部的元素。 empty() – 返回队列是否为空。 示例: MyQueue queue = new MyQueue(); queue.push(1); queue.push(2); queue.peek(); // 返回 1 queue.pop(...

qq_33466954的博客 292

LeetCode 232. 用栈实现队列(Implement Queue using Stacks) 4

232. 用栈实现队列 232. Implement Queue using Stacks 题目描述 使用栈实现队列的下列操作: push(x) -- 将一个元素放入队列的尾部。 pop() -- 从队列首部移除元素。 peek() -- 返回队列首部的元素。 empty() -- 返回队列是否为空。 每日一算法2019/5/7Day 4LeetCode232. Implement Queue...

weixin_30685029的博客 330

LeetCode232——用栈实现队列

我的LeetCode代码仓:https://github.com/617076674/LeetCode 原题链接:https://leetcode-cn.com/problems/implement-queue-using-stacks/description/ 题目描述: 知识点:栈、队列 思路:双栈实现队列 push(x)和empty()的时间复杂度是O(1)。 pop()和p...

清风阁 512

Day 10 | 232. Implement Queue using Stacks | 225. Implement Stack using Queue

Day 10 | 232. Implement Queue using Stacks | 225. Implement Stack using Queue

KKKKKKyle的博客 1306

用栈实现队列 Implement Queue using Stacks

232.Implement Queue using Stacks Easy 490104FavoriteShare Implement the following operations of a queue using stacks. push(x) -- Push element x to the back of queue. pop() -- Removes the element...

haponchang的博客 288

LeetCode 232 Implement Queue using Stacks(利用栈实现队列)

Implement the following operations of a queue using stacks. push(x) -- Push element x to the back of queue.pop() -- Removes the element from in front of queue.peek() -- Get the front element.empty(

nudt_oys的博客 634

leetcode 232. Implement Queue using Stacks 用栈实现队列 python3

时间:2020-6-12 题目地址:https://leetcode-cn.com/problems/invert-binary-tree/ 题目难度:Easy 题目描述: 使用栈实现队列的下列操作: push(x) -- 将一个元素放入队列的尾部。 pop() -- 从队列首部移除元素。 peek() -- 返回队列首部的元素。 empty() -- 返回队列是否为空。 示例: MyQueue queue = new MyQueue(); queue.push(1); queue.push

isabloomingtree的博客 242
上一篇: Leetcode NO.146 lru-cache LRU Cache 最近最少使用实现
下一篇: Leetcode NO.20 Valid Parentheses 有效的括号
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值