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

news2025/7/23 16:35:20

剑指-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. 1 <= values <= 10000
  2. 最多会对appendTail、deleteHead进行 10000 次调用

思路

image-20230307203937763

  1. 两个栈实现队列,栈A存储数据栈B用于将栈A中的元素倒序,再出栈,即将队首删除

  2. 例如:栈A:[1,2,3] 想要删队首删A,那么将栈A依次出栈,栈B依次入栈,栈B:[3,2,1] ,这时候再将栈B栈顶元素出栈,即元素为1,删除了队首元素

  3. 算法思想有了,那么就需要讨论特定的不同情况了

    (1)如果栈B元素为空,则需要将栈A的元素依次出栈,压入栈B,这时候再将栈B的栈顶元素出栈

    (2)当栈B元素为空的同时,栈A元素也为空(后续没有压入栈A的操作即没有入队的操作),这时候队列为空返回-1

    (3)当栈B有元素,栈B的栈顶元素直接出栈

代码

var CQueue = function() {
    //初始化两个栈
    this.stackA = []
    this.stackB = []
};

/** 
 * @param {number} value
 * @return {void}
 */
CQueue.prototype.appendTail = function(value) {
    //栈A入栈
    this.stackA.push(value)
};

/**
 * @return {number}
 */
CQueue.prototype.deleteHead = function() {
    //判断栈A和栈B是否同时为空 同时为空返回-1
    if(this.stackA.length === 0 && this.stackB.length === 0){
        return -1
    }
    //如果B为空 将A中的元素依次出栈 在B中依次入栈
    if(this.stackB.length === 0){
        while(this.stackA.length){
            //A出栈 B入栈
            this.stackB.push(this.stackA.pop())
        }
        //栈B栈顶元素出栈
        return this.stackB.pop()
    }else{
        //栈B不为空 直接栈B的栈顶元素直接出栈
        return this.stackB.pop()
    }
};

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

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

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

相关文章

Qt 事件循环

一、QT消息/事件循环机制   Qt作为一个可视化GUI界面操作系统&#xff0c;是基于事件驱动的&#xff0c;我们程序执行的顺序不再是线性的&#xff0c;而是由一个个应用程序内部或外部的事件进行驱动的&#xff0c;无事件时便阻塞。这个有点类似于while循环&#xff0c;函数体…

智能交通数据集Rope3D(仅限科研使用)

Rope3D Dataset 官网&#xff1a;https://thudair.baai.ac.cn/index &#xff01;&#xff01;&#xff01;如想要使用Rope3D数据集进行2D检测&#xff0c;最后有我们处理完的数据集链接。 &#xff01;&#xff01;&#xff01; 介绍&#xff1a; DAIR-V2X数据集是首个用于…

11 款全能的苹果设备激活锁移除工具

出于安全原因&#xff0c;每个 Apple 用户都可以设置一个 Apple ID和密码来保护他们的信息。但如果您忘记了 Apple ID 和密码&#xff0c;您将无法使用 iCloud 激活锁。如果发生这种情况&#xff0c;您应该怎么办&#xff1f;不用担心。iCloud 激活锁移除工具专为在 iOS 设备上…

【Arduino疑难杂症】:arduino IDE2.0.4安装ESP8266、ESP32库教程

& 项目场景&#xff1a; 2023年3月7日&#xff0c;在使用新版arduino编程ESP8266的时候&#xff0c;发现无法像老版本那样去添加库或添加zip库&#xff0c;这个纯个人原因&#xff0c;以免习惯了老版本的一些同学也会迷茫这个问题&#xff0c;于是这篇文章应运而生&…

汽车标定知识整理(三):CCP报文可选命令介绍

目录 一、可选命令 CRO命令报文的可选命令表&#xff1a; 二、可选命令帧格式介绍 1、GET_SEED——获取被请求资源的种子&#xff08;0x12&#xff09; 2、UNLOCK——解锁保护&#xff08;0x13&#xff09; 3、SET_S_STATUS——设置Session状态&#xff08;0x0C&#xff0…

Webpack打包--优化项目

1. Webpack基本概念 目标: webpack本身是, node的一个第三方模块包, 用于打包代码 2.Webpack能做什么 把很多文件打包整合到一起, 缩小项目体积, 提高加载速度 3.Webpack的官方解释 从本质上来讲&#xff0c;webpack是一个现在的javaScript应用的静态模块化打包工具。&#xff…

leetcode 2187. Minimum Time to Complete Trips(完成行程的最短时间)

(Medium) time数组里面是每个bus完成一次路程需要的时间&#xff0c;假设时间单位是h, 比如time [1,2,3]就表示第1辆bus跑完路程需要1h&#xff0c;第2辆需要2h&#xff0c;第3辆需要3h. 那么把所有bus都考虑进来&#xff0c;总共要跑完totalTrips次路程&#xff0c;问至少需…

数据库之基本功:Where 中常用运算符

1. 运算符及优先级 ( )优先级最高 SQL> show user; USER is "SCOTT" SQL> select ename, job, sal, comm from emp where jobSALESMAN OR jobPRESIDENT and sal> 1500;ENAME JOB SAL COMM …

Pyspark基础入门5_RDD的持久化方法

Pyspark 注&#xff1a;大家觉得博客好的话&#xff0c;别忘了点赞收藏呀&#xff0c;本人每周都会更新关于人工智能和大数据相关的内容&#xff0c;内容多为原创&#xff0c;Python Java Scala SQL 代码&#xff0c;CV NLP 推荐系统等&#xff0c;Spark Flink Kafka Hbase Hi…

回收站清空恢复,4种方法任你选!

案例&#xff1a;不小心清空了回收站怎么恢复&#xff1f; “回收站刚刚清空的文件怎么恢复呀&#xff1f;辛苦收集的材料不小心删除了&#xff0c;请大神来帮我下。” 回收站是我们电脑上的一个非常实用的功能&#xff0c;可以让我们暂时存放不需要的文件或者是可以被删除的…

启动u盘还原成普通u盘(Windows Diskpart)

使用windows系统的diskpart 命令解决系统盘恢复成普通U盘的问题&#xff1a;1. 按Windows R键打开运行窗口。在搜索框中输入“ Diskpart ”&#xff0c;然后按 Enter 键。2. 现在输入“ list disk ”并回车。3. 然后输入“ select disk X ”&#xff08;将 X 替换为可启动U盘的…

围棋高手郭广昌的“假眼”棋局

&#xff08;图片来源于网络&#xff0c;侵删&#xff09;文丨熔财经作者|易不二2022年&#xff0c;在复星深陷债务压顶和变卖资产漩涡的而立之年&#xff0c;“消失”已久的郭广昌&#xff0c;在质疑与非议声中回国稳定军心&#xff0c;强调复星将在未来的五到十年迎来一个全新…

安卓反编译入门03-dex2jar反编译apk得到Java源代码

1.获取工具dex2jar下载地址&#xff1a;http://sourceforge.net/projects/dex2jar/files/直接下载下载完成后&#xff0c;解压得到文件夹dex2jar-2.0jd-gui下载地址&#xff1a;http://jd.benow.ca/ 直接下载&#xff08;官网版本无法复制中文&#xff0c;可以用这个&#xff0…

K8s pod 动态弹性扩缩容 HPA

一、概述Horizontal Pod Autoscaler&#xff08;HPA&#xff0c;Pod水平自动伸缩&#xff09;&#xff0c;根据平均 CPU 利用率、平均内存利用率或你指定的任何其他自定义指标自动调整 Deployment 、ReplicaSet 或 StatefulSet 或其他类似资源&#xff0c;实现部署的自动扩展和…

算法练习-二分查找(二)

算法练习-二分查找(二&#xff09; 文章目录算法练习-二分查找(二&#xff09;1 二分查找1.1 题目1.2 题解2 猜数字大小2.1 题目2.2 题解3 寻找比目标字母大的最小字母3.1 题目3.2题解4 搜索插入位置4.1 题目4.2 题解5 在排序数组中查找元素的第一个和最后一个位置5.1 题目5.2 …

34- PyTorch数据增强和迁移学习 (PyTorch系列) (深度学习)

知识要点 对vgg 模型进行迁移学习定义数据路径: train_dir os.path.join(base_dir, train) # base_dir ./dataset 定义转换格式: transform transforms.Compose([transforms.Resize((96, 96)), # 统一缩放transforms.ToTensor(), # 转换为tensortransforms.No…

如何查找你的IP地址?通过IP地址能直接定位到你家!

我们ip地址分为A、B、C、D、E共5类&#xff0c;每一类地址范围不同&#xff0c;从A到Eip地址范围依次递减&#xff0c;其中哦&#xff0c;D和E是保留地址&#xff0c;我们用不了。A、B、C3类地址很多都被美国这样的西方国家分走了&#xff0c;而留给我们的就剩有限的地址了&…

记一次接口远程调用异常排查链路 Remote peer closed connection before all data could be read

前言&#xff1a; 异常信息&#xff1a; java.io.IOException: UT000128: Remote peer closed connection before all data could be read 在九月份-十月初一直都被这个问题困扰&#xff5e; 排查链路 第一次、二次、三次排查该问题&#xff1a; 当时看到”Remote peer c…

支持在局域网使用的项目管理系统有哪些?5款软件对比

一、选择私有部署的原因以及该方案的优点有很多可能的原因导致人们更倾向于使用私有部署的企业管理软件&#xff0c;其中一些原因可能包括&#xff1a;1.数据安全性要求&#xff1a;一些企业管理软件包含敏感的商业数据和隐私信息&#xff0c;为了保护这些信息不被未经授权的第…

MyBatisPlus中的条件构造器Wrapper

引言为什么要了解Wrapper&#xff1f;Wrapper解决的了什么问题&#xff1f;一、Wrapper&#xff1a;条件构造抽象类&#xff0c;用来解决单表操作出现的一些复杂问题,例如排序&#xff0c;和模糊查询等等结构图文字解释AbstractWrapper &#xff1a; 用于查询条件封装&#xff…