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

【剑指 Offer】剑指 Offer 09:用两个栈实现队列 题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) 这道题刚开始看题目没看懂,主要是对队列的概念模糊,其实只要搞清楚栈和队列处理数据时的区别就通透了: 栈无法实现队列功能: 栈底元素(对应队首元素)无法直接删除,需要将上方所有元素出栈。 双栈可实现列表倒序: 设有含三个元素的栈 A = [1,2,3]和空栈 B = []。若循环 阅读详情

从题目代码给的注解可以得出
题意为创建一个类,CQueue,可以实现队列,要求使用两个栈来完成
题目给了一个构造器,一个添加方法,一个删除方法
(给个输入输出案例属实没有看懂)

总体思想为
两个栈,一个用来添加元素,当删除元素时,就将第一个栈的元素添加到另一个栈中,根据栈的特性,第二个栈的栈顶恰巧为加入的第一个元素;
当再添加元素时,就继续加入第一个栈;当再删除元素时,就分为三种情况 :

  1. 第二个栈为空,就将第一个栈依次出栈,加入到第二个栈中,再将第二个栈出栈一个元素
  2. 第二个栈不为空,就将第二个栈出栈一个元素
  3. 两个栈都为空,说明没有元素了,返回-1*/
class CQueue {

    Stack<Integer> addStack;
    Stack<Integer> delStack;

    /** 构造器,创建两个栈*/
    public CQueue() {
        addStack = new Stack<>();
        delStack = new Stack<>();
    }

    /** 添加方法,就直接在第一个栈中加入元素即可*/
    public void appendTail(int value) {
        addStack.add(value);
    }

    /** 删除方法,3种情况
     * 1. 第二个栈为空,就将第一个栈依次出栈,加入到第二个栈中,再将第二个栈出栈一个元素
     * 2. 第二个栈不为空,就将第二个栈出栈一个元素
     * 3. 两个栈都为空,说明没有元素了,返回-1*/
    public int deleteHead() {
        if (addStack.isEmpty() && delStack.isEmpty()) return -1;
        if (delStack.isEmpty()){
            while (!addStack.isEmpty()){
                delStack.push(addStack.pop());
            }
            return delStack.pop();
        }else {
            return delStack.pop();
        }
    }
}

/**
 * Your CQueue object will be instantiated and called as such:
 * CQueue obj = new CQueue();
 * obj.appendTail(value);
 * int param_2 = obj.deleteHead();
 */
Transformer是什么?看完这篇你就醍醐灌顶 前言 由谷歌团队提出的预训练语言模型BERT近年来正在各大自然语言处理任务中屠榜(话说学者们也挺有意思的,模型名都强行凑个芝麻街的人物名,哈哈哈)。 BERT算法的最重要的部分便是Transformer的概念,它本质上是Transformer的编码器部分。 而Transformer是什么呢?transformer是永远的神,自从transformer使用了抛弃rnncnn的纯attention机制之后,各种基于transformer结构的预训练模型都如雨后春笋般雄起,而transformer中最重要就是使用 阅读详情

相关推荐

LTE信令流程实战:从Attach到Service Request的完整解析(附常见问题排查)

本文深入解析LTE信令流程中的Attach和Service Request关键环节,提供从基础原理到实战排查的完整指南。涵盖鉴权、承载建立等核心步骤,分析常见故障模式及优化方案,并附赠信令跟踪工具使用技巧,助力通信工程师提升网络运维效率。

alpha的博客 319

剑指 Offer 09. 用两个栈实现队列 C++代码——OJ: LeetCode

剑指 Offer 09. 用两个栈实现队列 我们需要维护两个栈s1和s2,使用s1接收新添加进来的元素,使用s2辅助出队操作。 对于构造函数CQueue(),当然是要把s1和s2全部清空,扫清一切障碍~ 对于appendTail(int value)函数,直接将元素push到s1中; 对于deleteHead()函数,应该先判断s2是否为空 如果s2为空,则依次将s1中元素出栈并压入s2中,完成后再将s2的栈顶元素pop出来,就满足了先入队先出队的原则; 如果s2不为空,则直接pop出s2的栈顶元素;

weixin_42989041的博客 258

HDR视频技术之七:逆色调映射

HDR 技术说是继 4K 之后视频领域的又一次重大技术突破,不仅提高图像的动态范围,同时也提供了更宽的色域,并提升了画面在高光和暗部的细节信息,带给观看者更加真实的视觉体验。但作为 HDR 产业链的核心,内容短缺的问题仍然是 HDR 普及和成熟的重要限制因素。众多电视厂商将 HDR 技术作为其产品规划中的重要技术,主要是在硬件方面进行提升。而由于 HDR 内容制作对于设备要求较高,对采集、调色、显示等多方面都需要较高的质量要求,内容制作的复杂度和周期长等因素,导致了 HDR 内容的匮乏。

多媒体开发者 2429

LeetCode 剑指offer 09.用两个栈实现队列

用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )这道题很简单,主要理解栈与队列的区别,注意细节就可以。

编程技术, 日益精进 340

手把手教你用TUSB2E22中继器实现eUSB2与USB 2.0互转(附实测数据对比)

本文详细介绍了如何利用TUSB2E22中继器实现eUSB2与USB 2.0的高效互转,包括技术背景、硬件设计要点、信号完整性测试方法及故障排查策略。通过实测数据对比,展示了TUSB2E22在信号延迟、功耗和眼图性能上的显著优势,为工程师提供了实用的工程方案。

weixin_29199873的博客 283

全网最详细 解决戴维南定理的详细推导

替代定理,戴维南定理详细证明

m0_52555753的博客 3万+

【LeetCode】【栈】剑指 Offer 09. 用两个栈实现队列 思路解析和代码

剑指 Offer 09. 用两个栈实现队列 题目链接 个人思路 题意 深入队列底层实现,用两个栈实现队列的插入和删除操作 思路 个人思路 插入时:先把元素push进栈1,再将栈1中的所有元素挪到栈2中,此时栈2中的top即为队首元素(此处理解错题意了,插入时,题目并不要求显示出队列中元素的正确顺序,其实题目只要求删除时能先删掉最先入队的元素即可,并有返回值) 删除时:先将栈1中的元素都挪到栈2中,再删去栈顶元素(最先入队的元素),再将剩余元素挪回栈1 void appendTail(int value)

九筒的博客 162

RAG在医药行业为什么80%都翻车了?

这篇文章不是要劝你别做RAG,而是把坑说清楚。医药行业有它的特殊性——监管压力、专业术语密度、多语言混排、文档结构复杂——这些因素叠加在一起,让标准RAG教程里的那套方法论几乎直接失效

qq_31808385的博客 635

剑指Offer09用两个栈实现队列

题目 剑指 Offer 09. 用两个栈实现队列 用两个栈实现队列。 解题思路 感觉有O(n)O(n)O(n)的解法,但是想了好一会还是没想到,看了数据范围1e4,交了一发O(n2)O(n^2)O(n2)的过了。 原思路就是简单的来回倒。 题解思路 维护两个栈,一个维护插入,一个维护删除。需要删除的时候可以把插入栈里的元素全部倒进删除栈里,注意只有删除栈为空了,才会倒,否则会破坏元素的顺序。很巧妙。 代码 class CQueue { stack<int> st1, st2; publ

陈颜的博客 6305

西门子交换机环网冗余设置(实战篇2.2)

MRP的重组时间为 200ms 因此 PROFINET 通信必须选择大于 200ms 的看门狗时间,看门狗。ET200SP默认为 2ms*3=6ms) MRP 的重组时间为 200ms 故系统会报出看门狗超时。更新,默认是 3 个周期,超出设置的周期数就会报 IO 设备故障。时间不是直接配置的,而是作为没有 IO 数据可接受的更新周期,也就是允许几个周期没有数据。来达到大于 200ms 的看门狗时间的要求(看门狗时间 可接受更新周期数 更新时间)。是IO 控制器和 IO 设备)

weixin_42580591的博客 366

在MATLAB中将C语言代码转化为可执行的mexw64文件

这样,您可以将高效的C语言算法集成到MATLAB环境中,以便更好地利用MATLAB的功能和特性。请记住,在使用mex转换C语言代码之前,您需要正确编写和测试C语言代码,并确保它与MATLAB的mex接口兼容。MATLAB是一种功能强大的数值计算软件,它提供了一个机制,可以将C语言代码转化为MATLAB可执行的mexw64文件。在上述命令中,"-output"选项指定生成的mex文件的名称,"myfunction"是您选择的名称,"myfunction.c"是要编译的C语言源文件。步骤1:编写C语言代码。

CodeRoarX的博客 1428

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

题目描述: 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead操作返回 -1 ) 示例 1: 输入: ["CQueue","appendTail","deleteHead","deleteHead"] [[],[3],[],[]] 输出:...

lll_y1025的博客 732

SAP_PP模块中MRP中信号灯简介

一、信号灯的作用二、常见的信号灯颜色及含义三、信号灯的来源四、常见场景示例示例1:物料满足所有需求示例2:生产订单已延迟示例3:缺料或未产生计划订单五、相关事务码参考六、如何应对红色或黄色信号灯?七、前台操作说明在 SAP PP 模块中,**MRP(物料需求计划)运行结果中的“信号灯”是一种非常直观的可视化提示工具,用于帮助用户快速识别物料计划是否存在异常或需要关注的问题。这些信号灯通常出现在MD04(库存/需求清单)、MD05(单物料MRP清单)、MD07(MRP列表)**等事务代码的界面中。

我小时候很黑的博客 637

每日一题python【剑指 Offer 09. 用两个栈实现队列】

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

qq_42896431的博客 435

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

【剑指offer09】【C++】用两个栈实现队列

【剑指offer09】【C++】用两个栈实现队列题目题解 题目 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) 示例 1: 输入: ["CQueue","appendTail","deleteHead","deleteHead"] [[],[3],[],[]] 输出: [null,null,3,-1] 示例 2: 输入: ["CQ

程序员阿浪 371

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

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

题目: 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) 剑指offer 09 思路: 栈是先进后出,假设输入 123,输出则是321 队列是先进先出,假设输入123,输出则是123. 建立一个输入栈s1和输出栈s2,将输入栈的元素移入输出栈,再将s2的元素依次弹出,其效果即如队列。 class CQueue { privat

机械工程跑路哥 6809

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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

剑指Offer 09:用两个栈实现队列题干怎么想图片实现代码实现 题干   用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) 示例1: - 输入: ["CQueue","appendTail","deleteHead","deleteHead"] [[],[3],[],[]] 输出:[null,null,3,-1] 示例2: 输入

weixin_49870878的博客 360

《LeetCode力扣练习》剑指 Offer 09. 用两个栈实现队列 Java

《LeetCode力扣练习》剑指 Offer 09. 用两个栈实现队列 Java 一、资源 题目: 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) 示例 1: 输入: [“CQueue”,“appendTail”,“deleteHead”,“deleteHead”] [[],[3],[],[]] 输出:[null,null,3

XRT_knives的博客 182

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

问题描述 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead操作返回 -1 )。 其中: 1 <= values <= 10000 最多会对appendTail、deleteHead 进行10000次调用 示例 1: 输入: ["CQueue","appendTail","deleteHead","deleteHead"] [...

Ulrich蚊子Blog 409
上一篇: 剑指 Offer 45. 把数组排成最小的数
下一篇: 剑指 Offer 29. 顺时针打印矩阵
Huiex胖子君
博客等级 码龄6年 3粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值