1. 栈与队列经典题目解析今天要分享的是《代码随想录》Day10的四道经典题目232.用栈实现队列、225.用队列实现栈、20.有效的括号、1047.删除字符串中的所有相邻重复项。这几道题都是栈和队列这一章节的核心题目也是面试中的高频考点。1.1 栈与队列基础回顾栈Stack和队列Queue是两种最基础的数据结构。栈遵循LIFO后进先出原则而队列遵循FIFO先进先出原则。在大多数编程语言的标准库中都提供了这两种数据结构的实现。栈的基本操作包括push将元素压入栈顶pop弹出栈顶元素peek/top查看栈顶元素但不弹出isEmpty判断栈是否为空队列的基本操作包括enqueue将元素加入队尾dequeue从队首移除元素front查看队首元素isEmpty判断队列是否为空理解这些基本操作是解决今天这几道题目的基础。2. 232. 用栈实现队列2.1 问题描述请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作push、pop、peek、empty。2.2 解题思路用栈实现队列的关键在于如何利用两个栈来模拟队列的FIFO特性。我们可以将一个栈作为输入栈另一个作为输出栈当执行push操作时直接将元素压入输入栈当执行pop或peek操作时如果输出栈为空则将输入栈的所有元素依次弹出并压入输出栈然后从输出栈弹出或查看栈顶元素这样做的原理是将输入栈的元素转移到输出栈后元素的顺序就被反转了正好符合队列的FIFO特性。2.3 代码实现class MyQueue: def __init__(self): self.stack_in [] self.stack_out [] def push(self, x: int) - None: self.stack_in.append(x) def pop(self) - int: if self.empty(): return None if not self.stack_out: while self.stack_in: self.stack_out.append(self.stack_in.pop()) return self.stack_out.pop() def peek(self) - int: if self.empty(): return None if not self.stack_out: while self.stack_in: self.stack_out.append(self.stack_in.pop()) return self.stack_out[-1] def empty(self) - bool: return not self.stack_in and not self.stack_out2.4 复杂度分析时间复杂度push操作O(1)pop/peek操作摊还时间复杂度O(1)虽然最坏情况下是O(n)但每个元素最多被压入和弹出各一次空间复杂度O(n)需要两个栈存储所有元素2.5 注意事项在pop和peek操作时一定要先检查队列是否为空只有当输出栈为空时才需要将输入栈的元素全部转移到输出栈这种实现方式下peek和pop操作有重复代码可以提取公共逻辑3. 225. 用队列实现栈3.1 问题描述请你仅使用两个队列实现一个后入先出LIFO的栈并支持普通栈的全部四种操作push、top、pop和empty。3.2 解题思路用队列实现栈的关键在于如何让最后入队的元素最先出队。有两种主要方法方法一使用两个队列主队列和辅助队列push操作将新元素加入辅助队列然后将主队列的所有元素依次出队并入队到辅助队列交换主队列和辅助队列的角色pop操作直接从主队列出队方法二使用一个队列push操作将新元素加入队列然后将队列中除最后一个元素外的所有元素依次出队并重新入队pop操作直接出队这里我们展示方法一的实现因为它更容易理解。3.3 代码实现from collections import deque class MyStack: def __init__(self): self.queue1 deque() self.queue2 deque() def push(self, x: int) - None: self.queue2.append(x) while self.queue1: self.queue2.append(self.queue1.popleft()) self.queue1, self.queue2 self.queue2, self.queue1 def pop(self) - int: return self.queue1.popleft() def top(self) - int: return self.queue1[0] def empty(self) - bool: return not self.queue13.4 复杂度分析时间复杂度push操作O(n)需要将所有元素从一个队列转移到另一个队列pop/top操作O(1)空间复杂度O(n)需要两个队列存储所有元素3.5 注意事项每次push操作后queue1中元素的顺序就是栈的顺序使用双端队列deque可以更高效地进行队列操作方法二虽然只需要一个队列但push操作的时间复杂度仍然是O(n)4. 20. 有效的括号4.1 问题描述给定一个只包括 (){}[] 的字符串 s 判断字符串是否有效。有效字符串需满足左括号必须用相同类型的右括号闭合左括号必须以正确的顺序闭合4.2 解题思路这是一个经典的栈应用问题。我们可以遍历字符串遇到左括号时将其压入栈遇到右括号时如果栈为空返回False弹出栈顶元素检查是否匹配最后检查栈是否为空4.3 代码实现class Solution: def isValid(self, s: str) - bool: stack [] mapping {): (, }: {, ]: [} for char in s: if char in mapping: top_element stack.pop() if stack else # if mapping[char] ! top_element: return False else: stack.append(char) return not stack4.4 复杂度分析时间复杂度O(n)只需遍历一次字符串空间复杂度O(n)最坏情况下需要存储所有左括号4.5 注意事项使用字典存储括号匹配关系可以使代码更简洁处理右括号时一定要先检查栈是否为空最后必须检查栈是否为空否则可能漏掉未匹配的左括号5. 1047. 删除字符串中的所有相邻重复项5.1 问题描述给出由小写字母组成的字符串 S重复项删除操作会选择两个相邻且相同的字母并删除它们。在 S 上反复执行重复项删除操作直到无法继续删除。返回最终字符串。5.2 解题思路这个问题同样可以使用栈来解决遍历字符串中的每个字符如果栈不为空且栈顶元素等于当前字符则弹出栈顶元素表示删除这对相邻重复项否则将当前字符压入栈最后将栈中剩余字符拼接成字符串返回5.3 代码实现class Solution: def removeDuplicates(self, s: str) - str: stack [] for char in s: if stack and stack[-1] char: stack.pop() else: stack.append(char) return .join(stack)5.4 复杂度分析时间复杂度O(n)只需遍历一次字符串空间复杂度O(n)最坏情况下需要存储整个字符串5.5 注意事项这个问题类似于括号匹配问题都是栈的典型应用使用栈可以避免字符串的频繁修改提高效率最后需要将栈中的字符拼接成字符串返回6. 总结与心得通过这四道题目我们可以深入理解栈和队列这两种基础数据结构的特点和应用场景栈和队列可以互相模拟但时间复杂度会有所不同栈特别适合处理对称性、匹配性问题如括号匹配、相邻重复项删除在实际编程中选择合适的数据结构可以大大简化问题的解决方案在实际面试中这几道题目都是高频考点特别是用栈实现队列和有效的括号这两题。建议熟练掌握它们的实现思路和代码并能够分析时间复杂度和空间复杂度。在刷题过程中我发现以下几点特别重要理解每种数据结构的基本特性和适用场景学会用简单的数据结构组合实现更复杂的功能注意边界条件的处理如空栈、空队列等情况多思考时间复杂度和空间复杂度的优化空间最后建议在完成这些题目后可以尝试LeetCode上栈和队列章节的其他题目如150.逆波兰表达式求值、239.滑动窗口最大值等进一步巩固相关知识。
企业数字化 ERP 产品动态
相关推荐
县域红色旅游DID数据分析与应用指南 1. 县域红色经典旅游景区DID数据解析县域红色经典旅游景区的DID数据(2002-2025)是一套涵盖中国县域范围内红色旅游景点的时空数据集。这类数据通常包含景区位置、游客量、收入、基础设施等核心指标,采用双重差分法(Difference-in-… · 2026/11/7 5:40:54
数据恢复软件怎么选:元数据解析、签名扫描与分区重建实战 硬盘灯还在闪,回收站已经清空,一个几百 GB 的素材盘突然显示“需要格式化才能使用”——这类现场我处理过太多次。绝大多数人第一反应是去找一款数据恢复软件,但真正决定成败的往往不是软件本身,而是你在按下“扫描”之前做的那几… · 2026/11/8 4:43:21
SEO内容优化与关键词策略的进阶实践 1. SEO内容优化的核心价值解析在数字营销领域,SEO内容优化早已超越简单的关键词堆砌,成为连接用户需求与网站价值的核心桥梁。我运营独立博客的七年实践中,发现优质内容带来的自然流量占比高达78%,这远高于任何付费渠道的转化效果… · 2026/11/5 4:42:57
电工证信息去哪查?真实经历告诉你怎么避免白交培训费 电工证信息去哪查?真实经历告诉你怎么避免白交培训费 怕考不过白交培训费?这事儿我懂,去年我有个徒弟花了几千块报了低压电工证培训,结果考试挂了,钱打水漂,人还特别郁闷。所以今天我掏心窝子给你讲讲【电工证信息去哪查】这个事儿,从考试内容、备考方… · 2026/11/8 11:14:32
公司明知没有电工证如何处理 官方报名入口怎么找 公司明知没有电工证如何处理 官方报名入口怎么找 之前考的证在外省能不能转过来?这个问题其实很多在南阳卧龙区的朋友都问过,特别是那些在培训机构报名、准备考试或者已经拿到证但还在纠结是否要换证的学员。今天就来聊聊,如果公司明知员工没有电工证,该… · 2026/11/8 11:14:32
电工证信息去哪查官方回应最全避坑指南 电工证信息去哪查官方回应最全避坑指南 你是不是也遇到过这种情况?不知道去哪报名怕被中介坑,电工证信息去哪查?官方回应来了,别再被那些“包过”“快速取证”的广告骗了。今天就从你最关心的几个问题出发,手把手教你避开报考陷阱,找到靠谱的报名渠道。… · 2026/11/8 11:14:32
金坛电工证哪里考怎么报名怕考不过白交培训费 金坛电工证哪里考怎么报名怕考不过白交培训费 怕考不过白交培训费?金坛电工证哪里考?别再乱花钱!很多想考电工证的朋友都遇到过这种情况,花了几千块报名,结果考试不过,连个证书都拿不到,培训费打了水漂。今天咱们就来聊聊金坛电工证到底哪里考,怎么报… · 2026/11/8 11:14:32
电工证高级技工证内部消息:平顶山建筑工人避坑全攻略 电工证高级技工证内部消息:平顶山建筑工人避坑全攻略 你是不是也遇到过这种情况?在工地干活几年了,想着考个电工证高级技工证, 不知道去哪报名怕被中介坑 ,结果跑了几家机构,要么要价高得离谱,要么根本不懂考试流程?其实, 内部消息… · 2026/11/8 11:14:32
零陵电工证怎么考官方回应实操考试心里没底怕挂科 零陵电工证怎么考官方回应实操考试心里没底怕挂科 你是不是正为零陵电工证怎么考发愁?尤其是实操考试心里没底,怕挂科?别急,老电工都懂,考试前的焦虑是常态,但真正能改变命运的,是你有没有掌握正确的方法。官方回应,2023年应急管理部对特种作业操… · 2026/11/8 11:13:32
电工证丢失还能补吗?千万别踩坑,丢了证等于失业 电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。… · 2026/11/8 0:00:20
电力电缆作业证直播报名入口与办理流程良心建议 电力电缆作业证直播报名入口与办理流程良心建议 你是不是也担心学历不高报不了名?别急,今天就给你讲讲 电力电缆作业证直播 的报名流程和那些你必须知道的干货, 良心建议 在这里,别错过。 电力电缆作业证直播报名需要什么条件?… · 2026/11/8 0:00:20
英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 怕考不过白交培训费?英德电工证报考费多少钱,你真的了解吗?现在市面上培训机构五花八门,价格参差不齐,很多人一不小心就花了冤枉钱,结果还考不过。别急,今天就来给你说清楚英德电工证的… · 2026/11/8 0:00:20
电工证丢失还能补吗?千万别踩坑,丢了证等于失业 电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。… · 2026/11/8 0:00:20
电力电缆作业证直播报名入口与办理流程良心建议 电力电缆作业证直播报名入口与办理流程良心建议 你是不是也担心学历不高报不了名?别急,今天就给你讲讲 电力电缆作业证直播 的报名流程和那些你必须知道的干货, 良心建议 在这里,别错过。 电力电缆作业证直播报名需要什么条件?… · 2026/11/8 0:00:20
英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 怕考不过白交培训费?英德电工证报考费多少钱,你真的了解吗?现在市面上培训机构五花八门,价格参差不齐,很多人一不小心就花了冤枉钱,结果还考不过。别急,今天就来给你说清楚英德电工证的… · 2026/11/8 0:00:20
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/7 11:25:08
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/7 12:02:18
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/8 1:18:25