(栈和队列) 232. 用栈实现队列 ——【Leetcode每日一题】

news2024/11/26 2:39:39

❓232. 用栈实现队列

难度:中等

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

实现 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 次 pushpoppeekempty
  • 假设所有操作都是有效的 (例如,一个空的队列不会调用 pop 或者 peek 操作)

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

💡思路:双栈

栈的顺序为后进先出,而队列的顺序为先进先出。

使用两个栈实现队列,一个元素需要经过两个栈才能出队列,在经过第一个栈时元素顺序被反转,经过第二个栈时再次被反转,此时就是先进先出顺序。

注意: 入队的时候,可以直接入栈in,出队的时候,要判断out栈是否为空,只有为空了,才能把in的内容全部移到out栈,否则顺序是不对的!

🍁代码:(Java、C++)

Java

class MyQueue {
    Stack<Integer> in = new Stack<>();//入队;
    Stack<Integer> out = new Stack<>();//出队;
    
    public MyQueue() {
    }

    public void push(int x) {
        in.push(x);
    }
    private void in2out(){
        if(out.isEmpty()){
            while(!in.isEmpty()){
                out.push(in.pop());
            }
        }
    }
    public int pop() {
        in2out();
        return out.pop();
    }
    
    public int peek() {
        in2out();
        return out.peek();
    }
    
    public boolean empty() {
        return in.isEmpty() && out.isEmpty();
    }
}

/**
 * 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();
 * boolean param_4 = obj.empty();
 */

C++

class MyQueue {
private:
    stack<int> in, out;

    void in2out(){
        if(out.empty()){
            while(!in.empty()){
                out.push(in.top());
                in.pop();
            }
        }
    }
public:
    MyQueue() {

    }
    
    void push(int x) {
        in.push(x);
    }
    
    int pop() {
        in2out();
        int x = out.top();
        out.pop();
        return x;
    }
    
    int peek() {
        in2out();
        return out.top();
    }
    
    bool empty() {
        return in.empty() && out.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();
 */

🚀 运行结果:

在这里插入图片描述

🕔 复杂度分析:

  • 时间复杂度 O ( 1 ) O(1) O(1)pushempty O ( 1 ) O(1) O(1)poppeek 为均摊 O ( 1 ) O(1) O(1)。对于每个元素,至多入栈和出栈各两次,故均摊复杂度为 O ( 1 ) O(1) O(1)

  • 空间复杂度 O ( n ) O(n) O(n)。其中 n 是操作总数。对于有 npush 操作的情况,队列中会有 n个元素,故空间复杂度为 O ( n ) O(n) O(n)

题目来源:力扣。

放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
关注我 leetCode专栏,每日更新!

注: 如有不足,欢迎指正!

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

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

相关文章

Jenkins之allure测试报告邮件通知

Jenkins入门教程&#xff1a;Jenkins入门 一般情况下&#xff0c;我们想让Jenkins将构建结果或构建中的代码执行结果&#xff08;比如跑批数据&#xff09;通知我们&#xff0c;这个是构建后的操作。 经常用的是邮件通知 邮件通知基础 Jenkins自带了邮件通知配置&#xff0c…

灌区信息化和灌区自动化监测方案

一、方案背景 以提升粮食综合生产能力和水资源高效利用作为现代化改造的目标&#xff0c;把国家粮食安全和节水放在首位&#xff1b;以完善灌区工程设施体系和管理体系作为现代化改造的基础&#xff0c;以现代信息技术应用、智慧灌区建设作为提高管理能力和服务水平的手段&…

windows 文件夹目录过长超过长度259字符 文件打不开

当路径超过260个字符时&#xff0c;Windows操作系统就无法处理文件或文件夹&#xff0c;并且无法打开或重命名。这是因为Windows系统使用的文件系统&#xff0c;即FAT和NTFS文件系统&#xff0c;都有最大路径限制。NTFS文件系统最大长度限制为32767个字符&#xff0c;但操作系统…

算法训练day4:栈与队列

那么我这里再列出四个关于栈的问题&#xff0c;大家可以思考一下。以下是以C为例&#xff0c;使用其他编程语言的同学也对应思考一下&#xff0c;自己使用的编程语言里栈和队列是什么样的。 C中stack 是容器么&#xff1f;我们使用的stack是属于哪个版本的STL&#xff1f;我们…

FPGA基于XDMA实现PCIE X8采集AD9226数据 提供工程源码和QT上位机程序和技术支持

目录 1、前言2、我已有的PCIE方案3、PCIE理论4、总体设计思路和方案5、vivado工程详解6、驱动安装7、QT上位机软件8、上板调试验证9、福利&#xff1a;工程代码的获取 1、前言 PCIE&#xff08;PCI Express&#xff09;采用了目前业内流行的点对点串行连接&#xff0c;比起 PC…

就这些了, 常见 6 款API 文档工具推荐

8年开发经验&#xff0c;想分享一下我接触到这些 API 文档工具&#xff1a; Swagger: Swagger 是一个开源的 API 文档管理工具&#xff0c;可以通过注解自动生成 API 文档&#xff0c;并提供交互式 UI 和 API 调试功能。 Swagger 支持多种语言和格式&#xff0c;包括 Java、Pyt…

Linux没网络的情况下快速安装依赖或软件(挂载本地yum仓库源(Repository))

一、上传iso系统镜像&#xff1a; 上传和系统同一版本、同一位数&#xff08;32bit&#xff1a;i686或i386/64bit:x86_64&#xff09;的系统&#xff0c;不能是Minimal版本&#xff0c;可以是DVD&#xff08;较全&#xff09;或everything&#xff08;最全&#xff09;。 注&am…

Android移除sdk中的权限

有些第三方sdk中的敏感权限会给我们上架带来困扰&#xff0c;比如&#xff1a;QUERY_ALL_PACKAGES权限会导致上架Google play被拒。 案例&#xff1a;<uses-permission android:name"android.permission.QUERY_ALL_PACKAGES" /> 在app下的Manifest中并没有添加…

linux编译安装python的全过程,pip python不与linux系统环境混乱

因为使用要求&#xff0c;使得我需要在linux环境下安装一个独立的python环境&#xff0c;不干扰其他环境。 预安装 在安装python之前&#xff0c;请在linux系统下安装下面这些包&#xff1a; sudo apt-get install namelibssl-dev libcurl4 libcurl4-openssl-dev zlib-devel…

Zynq-7000、国产zynq-7000的GPIO控制(一)

Zynq-7000系列GPIO排布如下图所示&#xff0c;著名手册ug585第14章&#xff0c;第一个图&#xff0c;这图很清晰的表明&#xff0c;一共54个MIO&#xff0c;64个EMIO&#xff0c;所有这些IO共分为4个bank&#xff0c;其中 Bank0 32bit —>> MIO[0:31] Bank1 22bit —…

【移动端网页布局】流式布局案例 ② ( 实现顶部固定定位提示栏 | 布局元素百分比设置 | 列表样式设置 | 默认样式设置 )

文章目录 一、样式测量及核心要点1、样式测量2、高度设定3、列表项设置4、设置每个元素的百分比宽度5、设置图像宽度 二、核心代码编写1、HTML 标签结构2、CSS 样式3、展示效果 三、完整代码示例1、HTML 标签结构2、CSS 样式3、展示效果 一、样式测量及核心要点 1、样式测量 京…

8、接口的高级用法

1、索引类型 我们可以使用接口描述索引的类型和通过索引得到的值的类型&#xff0c;比如一个数组[‘a’, ‘b’]&#xff0c;数字索引0对应的通过索引得到的值为’a’。我们可以同时给索引和值都设置类型&#xff0c;看下面的示例&#xff1a; interface RoleDic {[id: number…

现在的00后,真是卷死了呀,想离职了·····

都说00后躺平了&#xff0c;但是有一说一&#xff0c;该卷的还是卷。这不&#xff0c;刚开年我们公司来了个00后&#xff0c;工作没两年&#xff0c;跳槽到我们公司起薪23K&#xff0c;都快接近我了。 后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了。 …

Spring Aop原理全面详解汇总

文章目录 近期想法什么是AOPSpringAOP与AspectjSpringAOP体系概述概念详解连接点- Jointpoint切入点- Pointcut通知- Advice切面- Aspect织入- Weaving 实现原理—动态代理JDK动态代理描述原理代码示例注意执行结果 优点缺点 CGLib动态代理描述原理代码示例注意执行结果 优点缺…

《数理天地》期刊简介及投稿邮箱

《数理天地》期刊简介及投稿邮箱 《数理天地》用稿以数学、物理、学科交叉、科普等稿件为主&#xff0c;自创刊以来&#xff0c;以新观点、新方法、新材料为主题&#xff0c;坚持"期期精彩、篇篇可读"的理念。数理天地内容详实、观点新颖、文章可读性强、信息量大&a…

操作系统——第一章概论(上)

未闻花名&#xff0c;不见花开 文章目录 1.1.1 操作系统的概念&#xff0c;功能1.1.2 操作系统的特征1.2 操作系统的发展和分类1.3.1 操作系统的运行机制1.3.2 中断和异常 1.1.1 操作系统的概念&#xff0c;功能 通过下图可以发现用户和操作系统是有一部分是相连的&#xff0c…

锁屏密码忘记了?教你40秒破iphone锁屏密码!

案例&#xff1a;iPhone锁屏密码忘记了怎么办&#xff1f; 【求助&#xff0c;昨晚刚改的锁屏密码&#xff0c;今早起来想不起来了。苹果锁屏密码有什么方法可以破解吗&#xff1f;】 当你忘记了iPhone的锁屏密码&#xff0c;可能会感到困惑和无助。本文将介绍40秒破iphone锁屏…

从Redis到KeyDB:实现高可用和高可扩展性的转变

文章目录 从Redis到KeyDB&#xff1a;实现高可用和高可扩展性的转变特点**[线程模型]( )****[链接管理]( )****[锁机制]( )****[Active-Replica]( )** 结语 从Redis到KeyDB&#xff1a;实现高可用和高可扩展性的转变 今天给大家介绍的是KeyDB&#xff0c;KeyDB项目是从redis f…

2023年制造业产品经理NPDP认证报名找弘博创新

产品经理国际资格认证NPDP是新产品开发方面的认证&#xff0c;集理论、方法与实践为一体的全方位的知识体系&#xff0c;为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会&#xff08;PDMA&#xff09;成立于1979年&#xff0c;是…

IO多路复用机制

从阻塞 I/O 到 I/O 多路复用 阻塞IO&#xff1a; 阻塞 I/O&#xff0c;是指进程发起调用后&#xff0c;会被挂起&#xff08;阻塞&#xff09;&#xff0c;直到收到数据再返回。如果调用一直不返回&#xff0c;进程就会一直被挂起。因此&#xff0c;当使用阻塞 I/O 时&#xff…