(栈队列堆) 剑指 Offer 09. 用两个栈实现队列 ——【Leetcode每日一题】

news2024/12/24 14:36:41

❓ 剑指 Offer 09. 用两个栈实现队列

难度:简单

用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )

示例 1:

输入:
[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”,“deleteHead”]
[[],[3],[],[],[]]
输出:[null,null,3,-1,-1]

示例 2:

输入:
[“CQueue”,“deleteHead”,“appendTail”,“appendTail”,“deleteHead”,“deleteHead”]
[[],[],[5],[2],[],[]]
输出:[null,-1,null,null,5,2]

提示

  • 1 < = v a l u e s < = 10000 1 <= values <= 10000 1<=values<=10000
  • 最多会对 appendTaildeleteHead 进行 10000 次调用

💡思路:

用两个栈来实现一个队列,完成队列的 appendTail deleteHead 操作。

  • in 栈用来处理入栈(push)操作,out 栈用来处理出栈(pop)操作;
  • 一个元素进入 in 栈之后,出栈的顺序被反转。当元素要出栈时,需要先进入 out 栈,此时元素出栈顺序再一次被反转,因此出栈顺序就和最开始入栈顺序是相同的,先进入的元素先退出,这就是队列的顺序。
    在这里插入图片描述

🍁代码:(C++、Java)

C++

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

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

public:
    CQueue() { }
    
    void appendTail(int value) {
        in.push(value);
    }
    
    int deleteHead() {
        if(out.empty()){
            if(in.empty()) return -1;
            in2out();
        }
        int ans = out.top();
        out.pop();
        return ans;
    }
};

/**
 * Your CQueue object will be instantiated and called as such:
 * CQueue* obj = new CQueue();
 * obj->appendTail(value);
 * int param_2 = obj->deleteHead();
 */

Java

class CQueue {
    private Stack<Integer> in = new Stack<Integer>();
    private Stack<Integer> out = new Stack<Integer>();

    private void in2out(){
        while(!in.isEmpty()){
            out.push(in.pop());
        }
    }

    public CQueue() { }
    
    public void appendTail(int value) {
        in.push(value);
    }
    
    public int deleteHead() {
        if(out.isEmpty()){
            if(in.isEmpty()) return -1;
            in2out();
        }
        return out.pop();
    }
}

/**
 * Your CQueue object will be instantiated and called as such:
 * CQueue obj = new CQueue();
 * obj.appendTail(value);
 * int param_2 = obj.deleteHead();
 */

🚀 运行结果:

在这里插入图片描述

🕔 复杂度分析:

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

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

题目来源:力扣。

放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
关注我LeetCode主页 / CSDN—力扣专栏,每日更新!

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

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

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

相关文章

如何通过振动传感器实现设备的故障诊断和预测性维护?

在现代工业生产中&#xff0c;设备的故障和停机时间对于企业的生产效率和经济效益有着巨大的影响。为了提高设备的可靠性和降低维护成本&#xff0c;越来越多的企业开始采用振动传感器作为关键的监测工具。振动传感器能够实时监测设备的振动情况&#xff0c;并通过数据分析和算…

自制编译器代码4.6含义

规则一&#xff0c;识别一个" 规则二&#xff0c;识别除了",,\n.\r的其他字符 规则三&#xff0c;这里第一个\意思是一个转义字符\&#xff0c;意思是ASCII码 比如\077就是八进制ASCII码的? 规则四&#xff0c;识别其他所有字符 规则五&#xff0c;回到defailt状态 …

不懂代码也不用怕!10款无代码网站搭建平台

作为设计师&#xff0c;对网站满脑子的构思&#xff0c;却受限于时间和技能&#xff08;比如写代码&#xff09;&#xff0c;这是何其无奈&#xff01;那个在你脑中盘桓许久的网站&#xff0c;或许是一个博客&#xff0c;可能是作品展示网站&#xff0c;但无论是哪种&#xff0…

华为OD机试真题 Java 实现【等差数列】【2023 B卷 100分】,附详细解题思路

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答…

GUI实例

运行代码&#xff1a; //GUI实例 #include"std_lib_facilities.h" #include"GUI/Simple_window.h" #include"GUI/GUI.h" #include"GUI/Graph.h" #include"GUI/Point.h"struct Lines_window :Window {Lines_window(Point xy…

《5.linux驱动开发-第2部分-5.2.字符设备驱动基础》最简单的模块源码分析 lsmod insmod modinfo rmmod dmesg

5.1.6.驱动应该这么学 5.1.6.1、先学好C语言 5.1.6.2、掌握相关预备知识 (1)硬件操作方面 (2)应用层API 5.1.6.3、驱动学习阶段 (1)注重实践&#xff0c;一步一步写驱动 (2)框架思维&#xff0c;多考虑整体和上下层 (3)先通过简单设备学linux驱动框架 (4)学会总结、记录&#x…

自动化测试框架性能测试报告模板

目录 一、项目概述 二、测试环境说明 三、测试方案 四、测试结果 五、结果分析 总结&#xff1a; 一、项目概述 1.1 编写目的 本次测试报告&#xff0c;为自动化测试框架性能测试总结报告。目的在于总结我们课程所压测的目标系统的性能点、优化历史和可优化方向。 1.2 …

高效太阳能太阳光模拟器

高效太阳能太阳光模拟器是一种能够高效模拟太阳光的设备。它能够产生与太阳光相近的光谱分布、光强和光照角度等特性的光线&#xff0c;用于太阳能相关的研究和应用中。 为了实现高效太阳能太阳光模拟器&#xff0c;以下几个方面是需要考虑的&#xff1a; 1. 光源&#xff1a;…

C++进阶—C++11新特性(移动语义右值引用可变参数模板lambda表达式function包装器bind函数)

目录 0. C11简介 1. 统一的列表初始化 1.1 {}初始化 1.2 std::initializer_list 2. 声明 2.1 auto 2.2 decltype 2.3 nullptr 3. 范围for循环 4. 智能指针 5. STL中一些变化 6. 右值引用和移动语义 6.1 左值引用和右值引用 6.2 左值引用与右值引用比较 6.3 右值…

三菱FX以太网模块设置ModbusTCP通讯

大家好&#xff0c;今天我们要来聊一聊转以太网捷米特JM-ETH-FX&#xff0c;这款设备内部集成了ModbusTCP通讯服务器&#xff0c;这意味着什么&#xff1f;ModbusTCP客户机&#xff0c;比如支持ModbusTCP的组态软件、OPC服务器、PLC以及使用高级语言开发的实现ModbusTCP客户机软…

改善压降过大的六种方法

改善压降过大的六种方法 当进行完压降仿真完之后,如果结果都是PASS的话是我们最希望看到的,但是时常会因为某些原因,导致压降不通过,下面介绍几种弥补压降的几种措施 方法一 靠近用电端 如下图,电源放的离用电端太远将电源模块尽量靠近用电端放置,尤其是小电压大电流的电…

flink1.16读取hive数据存到es 本地和服务器上遇到的问题和解决思路

话不多说 直接上官网 Overview | Apache Flink hive版本 3.1.3000 ​ hadoop 版本 3.1.1.7.1.7 ​ flink 1.16.2 ​ 代码 很简单我还是贴下 import com.fasterxml.jackson.databind.ObjectMapper import com.typesafe.config.{Config, ConfigFactory} import org.apache…

[SQL系列] 从头开始学PostgreSQL 约束连接

上一篇的增删改查和基础筛选操作 [SQL系列] 从头开始学PostgreSQL 增删改查_Edward.W的博客-CSDN博客https://blog.csdn.net/u013379032/article/details/131775853这篇大多是基于单张表的一些简单操作&#xff0c;但是我们经常要操作多张表一起查询&#xff0c;有些表的位置还…

HashSet 、LinkedHashSet 源码级详解

Set 集合类体系如下&#xff1a; HashSet -- 无序、不重复、无索引 LinkedHashSet -- 有序、不重复、无索引 TreeSet -- 可排序、不重复、无索引 HashSet HashSet 底层采用 哈希表 存储数据 哈希表组成 JDK8 之前 -- 数组 链表 JDK8 之后 -- 数组 链表 红黑树 一开始…

GitHub 上都有哪些值得关注学习的 javascript开源项目?

前言 下面是我整理的一些关于GitHub上的js的相关的项目&#xff0c;希望对你有所帮助 实用工具向 1.Exchart Star&#xff1a;55.6k Exchart提供了大量精美的图表&#xff0c;只有你想不到&#xff0c;没有你在它上面找不到的&#xff0c;同时点进相应的图标后便可以在线对它…

SpringCloud系列:负载均衡组件-Ribbon

作者平台&#xff1a; | CSDN&#xff1a;blog.csdn.net/qq_41153943 | 掘金&#xff1a;juejin.cn/user/651387… | 知乎&#xff1a;www.zhihu.com/people/1024… | GitHub&#xff1a;github.com/JiangXia-10… 本文一共4529字&#xff0c;预计阅读12分钟 前言 前面几…

【单谐波非线性振动问题求解器 GUI 】使用单个谐波表示解决 MDOF 非线性振动问题(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

音频驱动嘴形之CodeTalker

论文发版&#xff1a;CVPR2023 应用&#xff1a; Over the discrete motion space, a temporal autoregressive model is employed to sequentially synthesize facial motions from the input speech signal, which guarantees lip-sync as well as plausible facial expres…

TOWE智能PDU是如何帮助机房安然度夏的?

最近&#xff0c;全国各地纷纷进入高温“火炉”模式&#xff0c;炎炎夏日&#xff0c;数据中心的工作温度不应该超过一定的限度。数据中心机房不仅要确保在高温多雨天气下安全、稳定的运维&#xff0c;还要承受降低企业总体运营成本的压力。这种需求下&#xff0c;相较于传统基…