力扣每日一题:用两个栈实现队列 详细的思路介绍与逻辑整理!

两个月搞定面试算法【小白leetcode刷题训练】【python专场】 前言 刷题顺序来自极客时间,共分为8个专题,每周1个,两个月认真刷完基本大厂面试OK(我说的是认真刷!只抄题解不算)。截止到博主结束秋招时只刷到第5个专题,也基本够用了。也就是说认真刷题的话一个月就可以有offer入手了。 当然现在BAT的笔试做起来还是觉得费力,笔试是真的难啊! 博主是python选手,题解都是python写的。有问题欢迎交流,共同进步。 文章内附leetcode链接,直接点链接去做就行。同类型的尽量整理到一起了,也方便自己今后复习。 推荐五遍刷题法 1、读题+思考,10分钟内没思路,直接 阅读详情

剑指Offer09.用两个栈实现队列

https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof/solution/jian-zhi-offer09yong-liang-ge-zhan-shi-x-hybm/

难度:简单

题目:

用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,

分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead操作返回 -1 )

提示:

  • 1 <= values <= 10000
  • 最多会对 appendTail、deleteHead 进行 10000 次调用

示例:

示例 1:

输入:
["CQueue","appendTail","deleteHead","deleteHead"]
[[],[3],[],[]]
输出:[null,null,3,-1]
示例 2:

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

分析

首先扫盲队列与栈的知识:

  • 队列:先进先出
  • 栈:后进先出

那么,为什么要双栈实现队列呢?其实大家只要思考下:
我们准备两个栈add_stack和pop_stack:

  1. 先把1,2,3先挨个加入add_stack栈
  2. 下来依次将add_stack栈内的数据出栈,同时将出栈的数据加入pop_stack栈中
  3. 1、2执行完成后,add_stack变成了空,pop_stack栈中存储的数据成了[3,2,1]
  4. 那么下次出栈时,直接将pop_stack的栈内数据弹出,不就成了列队的先进先出!

关于什么时候执行2步骤需要注意下:

  1. 如果pop_stack栈中有数据,就直接return pop的数据
  2. 如果pop_stack栈中没有数据
    a. add_stack也没有数据,return -1
    b. add_stack有数据,执行上面步骤2,将add_stack数据加入pop_stack中
  3. 返回pop_stack栈弹出的数据

解题:

class CQueue:
    def __init__(self):
        self.add_stack, self.pop_stack = [], []

    def appendTail(self, value: int) -> None:
        self.add_stack.append(value)

    def deleteHead(self) -> int:
        if self.pop_stack:
            return self.pop_stack.pop()
        if not self.add_stack:
            return -1
        while self.add_stack:
            self.pop_stack.append(self.add_stack.pop())
        return self.pop_stack.pop()

欢迎关注我的公众号: 清风Python,带你每日学习Python算法刷题的同时,了解更多python小知识。

我的个人博客:https://qingfengpython.cn

力扣解题合集:https://github.com/BreezePython/AlgorithmMarkdown

算法竞赛进阶指南:从每日一题到国赛实战的系统训练方法论 算法与数据结构是计算机科学的核心基础,其原理在于通过高效的数据组织和计算策略解决复杂问题。掌握它们的技术价值在于能显著提升逻辑思维、问题抽象和工程实现能力,广泛应用于搜索引擎、推荐系统、自动驾驶等高性能场景。本文聚焦算法竞赛训练,深入剖析如何通过系统化的‘每日一题’实践,构建个人知识图谱,并运用动态规划、二分查找等关键技术进行单题精解与优化,最终将日常积累转化为国赛级别的团队协作与实战能力,为参赛者提供从量变到质变的完整成长路径。 阅读详情

相关推荐

LeetCode 每日一题 #23:合并 K 个升序链表|Python 分治归并与最小堆(优先队列)双解

几年前我准备求职时,也曾一头扎进 LeetCode 的题海。从最初的“看题懵圈”到后来能在面试中从容写出最优解,成了我提升算法能力最有效的方式。那段经历不仅帮我顺利拿到心仪 offer,更让我养成了系统思考和高效编码的习惯。如今工作稳定了,终于有时间把当年的刷题笔记重新整理、优化,并用逐题讲解清楚。希望能帮助正在准备面试、转行或想夯实基础的你——。:链表、多路归并、分治、最小堆、优先队列:困难:⭐⭐⭐⭐⭐(大厂高频题,考察数据结构综合应用)

张三的博客 354

题目 1895: 队列操作

题目 队列操作题。根据输入的操作命令,操作队列(1)入队、(2)出队并输出、(3)计算队中元素个数并输出。 输入 第一行一个数字N。 下面N行,每行第一个数字为操作命令(1)入队、(2)出队并输出、(3)计算队中元素个数并输出。 输出 若干行每行显示一个2或3命令的输出结果。注意:2.出队命令可能会出现空队出队(下溢),请输出“no”,并退出。 样例输入 7 1 19 1 56 2 3 2 3 2 样例输出 19 1 56 0 no 解题思路 设置一个数组表示队列,设置起始元素的下标、结尾元素的下标变量

博客简介 1367

ANSYS材料库实战:手把手教你用APDL命令流定义混凝土和形状记忆合金

本文详细介绍了在ANSYS中使用APDL命令流定义混凝土和形状记忆合金(SMA)的高级建模技巧。通过SOLID65单元和SMA本构模型,工程师可以精确模拟非线性材料行为,包括混凝土的开裂和SMA的超弹性效应。文章提供了完整的命令流示例和求解策略优化建议,帮助用户提升工程仿真效率。

hh234的博客 486

详解队列Queue

同栈类似,队列也是一种受限的线性表。其中受限指队列的操作是线性表的子集,它要求所有元素必须从一端插入新元素,从另外一端删除元素。添加元素的一端叫队尾 ,删除元素的一端叫队首。 图1 队列逻辑模型 根据底层使用的数据容器的不同,队列可分为以下两大类 顺序队列:使用数组作为数据容器 链式队列:使用链表作为数据容器 队列的逻辑定义是其具备先进先出(first in first out,FIFO)的特点,这种特点决定了队列的应用场景。 队列接口 根据队列的描述,可知队列的操作包括出队、入队、查看队首、获取队

TylerGuoj的博客 591

ComfyUI安装包运行前准备:安装Git

Git 是一个分布式版本控制系统(Version Control System, VCS),用于跟踪和管理文件(尤其是代码)的变更历史。 简单理解就是,git是用来管理文件的版本的,如果有新的版本,就可以使用git来更新。

聚梦小课堂 2万+

Mac上快速部署DeepSeek模型:Ollama终端操作全指南

本文详细介绍了在Mac上使用Ollama终端快速部署DeepSeek模型的完整指南。从硬件要求、Ollama安装、模型下载运行,到高级配置、可视化界面及常见问题解决,提供了全流程操作步骤与优化技巧,帮助开发者高效搭建本地AI助手,实现稳定、私密的离线使用体验。

weixin_29251567的博客 554

剑指offer系列-面试题-9 - 用两个栈实现队列 (python)

文章目录1. 题目2. 解题思路3. 代码实现3.1 不好的解法一:只适用于单线程3.2 不好的解法二:适用于多线程,但效率不高3.3 可行的解法4. 总结5. 参考文献 1. 题目 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 2. 解题思路 这道题也就是我们常说的实现单例模式。 3. 代码实现 3.1 不好的解法一:只适用于单线程 3.2 不好的解法...

besmarterbestronger的博客 203

SerDes系列之 SSC扩频时钟技术

扩频时钟,又称展频(SSC-Spread Spectrum Clocking),当前PCIE、DDR、USB等几乎所有的高速接口都支持SSC的功能。电子工程师在日常的电气测试中经常与之接触,在电磁传导和辐射发射验证过程中,经常需要使用到芯片的SSC功能,它的物理表现形式,就是信号的比特率会在一个很小的范围内浮动,多见于周期性变化的时钟信号。

一只豌豆象的博客 3443

教你如何使用单调队列解题

开篇 昨天我们介绍了单调栈的解题方法以及适合使用单调栈的几种解题情境。今天我们说的这种也是类似单调栈的另一种特殊数据结构——单调队列。废话不多说,我们直接开始。 单调队列 在教你如何使用单调栈中,我们就提到过单调队列这种数据结构。因为队列和栈都是我们熟悉的数据结构,二者非常类似,我们可以使用两个队列去实现一个栈,也可以使用两个栈去实现一个队列,因此单调栈和单调队列差不多。只不过还是最根本的入栈出栈以及入队出队的顺序问题,这个相信不用多提了。 单调队列顾名思义,就是队列内部元素单调的队列?我们都已经有了单调栈

weixin_44755413的博客 303

【数据分析】宏基因组alpha和beta多样性分析和差异物种筛选案例

本教程为读者呈现了宏基因组α和β多样性分析的完整案例。通过实际数据和详细步骤,读者可以深入理解这两种分析方法及其在R语言中的实现过程。教程中不仅提供了清晰的代码示例,还对每一步骤进行了详细解释,使读者能够轻松跟随并掌握分析技巧。无论是初学者还是有一定基础的研究者,都能通过本教程快速上手宏基因组多样性分析,为微生物组学研究提供有力支持。

专注生信领域 2218

机器人的“大脑”进化论:从专用控制器到高性能SoC的异构计算时代

摘要:随着AI与机器人技术融合,高性能芯片成为机器人智能化的关键。本文分析了机器人对芯片的核心需求,包括多模态数据处理、实时控制和智能决策能力。系统级芯片(SoC)因集成CPU、GPU/NPU等模块而成为主流选择。市场呈现分层格局:中低端设备(如扫地机器人)采用"MCU+轻量SoC"方案,满足基础功能;高端机器人则依赖"高性能SoC+独立GPU"处理复杂任务。除主控芯片外,完整的机器人系统还需传感器接口、驱动、通信等配套芯片。未来,芯片技术的进步将持续推动机器人智能化

致力于lidar应用开发 83

算法---双栈排序

1. 题目 参考链接: 猿辅导、美团、字节面试题——双栈排序 给定一个乱序的栈,设计算法将其升序排列。 ps: 允许额外使用一个栈来辅助操作 输入 [4, 2, 1, 3] 输出 [1, 2, 3, 4] 2. 题解 2.1 单调栈 使用一个辅助栈, 维护辅助栈为单调递增栈。 每次操作都保证辅助栈内元素有序, 最终返回辅助栈即可 算法流程 当原始栈不为空时, 执行如下操作: 每次从原始栈中取一个元素 cur, 与辅助栈顶元素 top 比较大小, 若 cur< top, 则将 top出栈并加入 原

知北行的博客 989

CKA-CN考试之路----1

后的的任意位置,但-n 和autoscale 必须是相连的.后面不再对命名空间部分做解释了.说明配置正确,如果无法保存退出,再次检查对齐.不用怀疑一定是复制的时候少了字母或者对齐出错.运行以下命令确认红色箭头的值和题目要求是否一致。将文档中的内容复制并粘贴到对应位置.,后续不再提醒yaml的对齐。确认脚本check1.sh。

Q先生 607

每日一道leetcode(不会做学习版,多学一题)

选择下标 2 最优:nums1[2] * nums2[2] = 3 * 10 = 30 是最大可能分数。- 选择下标 0 ,2 和 3 ,得到分数 (1+3+2) * min(2,3,4) = 12。- 选择下标 0 ,1 和 2 ,得到分数 (1+3+3) * min(2,1,3) = 7。- 选择下标 0 ,1 和 3 ,得到分数 (1+3+2) * min(2,1,4) = 6。- 选择下标 1 ,2 和 3 ,得到分数 (3+3+2) * min(1,3,4) = 8。

XiaoyaoCarter的博客 992

STM32实现简单的智能电子相框

具体的代码案例和详细的代码实现超过5000字,无法在此篇文章中提供。但是,你可以参考STM32的官方文档和相应的图形库和多媒体库的文档,以获得更详细的实现细节和代码示例。对于硬件,我们可以选择使用STM32开发板,如STM32F4 Discovery。对于软件开发环境,我们将使用Keil MDK-ARM作为开发工具,并使用STM32CubeMX进行代码配置。在本文中,我们将使用STM32单片机实现一个简单的智能电子相框,包括显示照片、播放视频和音乐功能。接下来,我们将详细描述实现智能电子相框的步骤。

2401_85625565的博客 1006

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

刷题心得|这些力扣刷题经验一定不能错过

其他题目答的都差不多,算法题做不出来,拿到 offer 的概率就会下降,部分同学在刷完 1000 多道题后,发现在面试的时候 80% 的算法题都是原题。即使这道题目你做出来了,击败 100% 了,也建议去看看别人的题解,学习更多他人解题的思路,帮助自己打开脑洞,做到 一题多解。还能帮助到更多同学。是 LeetCode 精心整理的算法和数据结构专项练习,每个专项对应一个重要的知识点,并通过一系列相关的题目带大家入门,相对自己零散地选题目来说,更加简单实用,还附有讲解,是入门的不二之选。找工作刷题,登陆 👉。

weixin_44071377的博客 1326

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

力扣(LeetCode)每日随机一题——1354.多次求和构造目标数组[困难]

优先队列,比较器

Kim-Hyunyeon的博客 413

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

力扣刷题:程序员面试与技能提升的必备指南

算法与数据结构是计算机科学的核心基础,掌握它们不仅能提升编程思维,还能优化实际工程中的性能问题。力扣(LeetCode)作为知名的算法练习平台,汇集了大量经典题目和面试真题,是程序员提升技能和准备技术面试的重要工具。通过系统性的刷题训练,开发者可以深入理解动态规划、贪心算法等关键技术,并应用于高并发系统、数据库优化等实际场景。本文结合多年实战经验,分享高效刷题方法论、代码模板化技巧以及常见误区,帮助读者从AC到最优解,全面提升算法能力。

weixin_34007886的博客 320

大厂面试真题解析:LeetCode高频面试题与解题思路

想要在**大厂面试**中脱颖而出?LeetCode算法题是每个程序员必须跨越的一道坎。本文将为你深度解析**大厂面试真题**中最常见的LeetCode高频面试题,并提供实用的**解题思路**和**算法模板**,帮助你系统性地准备技术面试。 ## 📊 为什么大厂面试都爱考算法题? 在**大厂面试**中,算法题不仅仅是考察你的编程能力,更重要的是检验你的**逻辑思维**、**问题分析能力**和*

gitblog_00395的博客 187

LeetCode刷题指南:高效算法训练与面试突破

算法与数据结构是计算机科学的核心基础,通过系统训练可以显著提升问题抽象能力和编码效率。经典算法如动态规划、双指针技巧等,能够优化时间复杂度从O(n³)到O(n²),在数据处理、系统设计等场景具有重要工程价值。LeetCode作为主流算法训练平台,其热题如3Sum、Two Sum等高频面试题,常考察哈希表、滑动窗口等技术的实战应用。针对春招季的集中训练,建议采用分类突破策略,结合五步解题法标准化流程,配合VS Code插件等工具链提升刷题效率。掌握这些方法不仅能快速提升面试通过率,更能培养解决复杂工程问题的底

weixin_34166472的博客 424

LeetCode高效刷题指南:谷歌方法论与本地化实践

算法与数据结构是计算机科学的核心基础,其原理在于通过特定的数据组织和操作逻辑,高效解决计算问题。掌握核心算法模式,如动态规划、哈希表和滑动窗口,能显著提升问题解决能力,具有极高的技术价值,尤其在优化程序性能和处理大规模数据时至关重要。这些技术的典型应用场景包括搜索引擎、推荐系统、金融风控以及,最直接相关的,技术面试中的编程能力考察。对于准备面试的开发者而言,系统化地刷题是巩固这些知识的有效途径。本文聚焦于一份被广泛验证的LeetCode刷题方法论,即所谓的“谷歌大佬推荐宝典”,它本质上是一套提炼了高频考点和

weixin_34161083的博客 420

LeetCode面试经典150题训练计划与实战技巧

数据结构与算法是计算机科学的核心基础,掌握它们对于技术面试和工程实践都至关重要。通过系统性的LeetCode刷题训练,开发者可以深入理解数组、链表、树等基础数据结构的操作原理,掌握动态规划、回溯等经典算法范式。这种训练不仅能提升解题能力,更能培养工程实践中的问题分析与优化思维。精选的高频面试题目训练计划,特别适合需要快速提升竞争力的开发者,覆盖滑动窗口、双指针等热门解题技巧,以及系统设计等面试必考领域。通过每日科学的题目分类训练和解题方法论实践,开发者可以在较短时间内建立完整的算法思维体系,应对一线科技公司

weixin_34037515的博客 383

如何高效掌握LeetCode解题:从基础到进阶的完整指南

LeetCode题解项目(gh_mirrors/le/leetcode)是一个全面记录解题 journey 的开源项目,包含了大量经典算法问题的详细解析和可视化图表,帮助开发者系统提升算法能力。无论你是算法新手还是有经验的开发者,这个项目都能为你提供清晰的解题思路和实用的编程技巧。 ## 为什么选择这个LeetCode解题项目? 对于算法学习而言,仅仅知道答案是远远不够的。这个项目的核心价值在

gitblog_00471的博客 1050

全栈面试终极实战指南:从基础到架构的完整攻略

在当今竞争激烈的技术面试环境中,全栈开发工程师需要掌握从前端到后端的全方位技能。本文为你提供一份实用的面试准备指南,帮助你系统性地准备技术面试,无论是初级还是高级职位都能从容应对。 ## 🎯 高频考点速查:面试必问的10大核心领域 **1. 架构设计深度解析** - **SOLID原则实战应用**:每个原则的具体代码示例和违反后果 - **微服务架构避坑指南**:什么时候该用,什么时候不该用

gitblog_00830的博客 1106

leetcode HOT100总结

本人菜鸡一枚,历时两个月时间把HOT100题做完(Ctrl C-V)了,做完之后还是感觉到很虚,很多中等题还是不会做,于是乎花几天时间把这100题给总结一下。一方面,对自己的知识梳理;另一方面,便于后续回顾。(完成度99,是因为有一道题目收费,没有做!哈哈哈!)以下所有题目都是用Python3实现的。 下面是对这些题目按照算法进行分类整体,主要包括排序、哈希表、递归\回溯、链表、双指针、动态规划、二分查找、贪心、树、深度优先搜索、广度优先搜索等。 在整理之前,先学习一下Python的基本数据类型有哪些,请

qq_36561737的博客 4756

蓝桥杯国赛冲刺:从算法基础到每日一练的系统化路径

算法是计算机科学的核心,它通过一系列明确的指令解决特定问题,其效率由时间与空间复杂度衡量。理解算法原理,如分治、动态规划、贪心等思想,是构建高效程序的基础。掌握数据结构,如数组、链表、哈希表,是算法实现的物理载体。在工程实践中,算法能力直接决定了软件的性能上限与问题解决能力,尤其在数据处理、人工智能、搜索引擎等场景中至关重要。对于参加蓝桥杯等算法竞赛的开发者而言,系统化的知识体系与持续的刻意练习是提升竞争力的关键。本文聚焦于如何通过高效的“每日一练”方法,将算法基础与核心思想应用于竞赛准备,其中涉及对动态规

congsikuai0611的博客 406
上一篇: 力扣每日一题:477.汉明距离总和 字符串矩阵与列表计数器 双解分析!
下一篇: 力扣每日一题:5.最长回文子串 回文场景判断的中心扩散法!
清风Python
博客等级 码龄7年 406粉丝 267原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值