当前位置: 首页 > article >正文

栈与队列经典算法题精讲(一):循环队列·有效括号·面试高频原题全解析

个人主页黎雁作者简介C/C/JAVA后端开发学习者❄️个人专栏C语言、数据结构C语言、EasyX、JAVA、数据结构与算法JAVA、游戏、规划、程序人生✨ 从来绝巘须孤往万里同尘即玉京文章目录栈与队列经典算法题精讲文章摘要前置知识回顾1. 设计循环队列(1) 题目描述(2) 实现思路(3) 代码实现(4) 关键点说明2. 有效的括号(1) 题目描述(2) 思路一 栈匹配法(3) 代码实现(4) 思路二 暴力消除法(5) 代码实现(6) 两种思路对比核心考点总结设计循环队列有效括号写在最后栈与队列经典算法题精讲循环队列·有效括号·面试高频原题全解析文章摘要阅读时长18 分钟适合人群算法入门与刷题新手 重点掌握循环队列设计、有效括号解法面试备战同学 重点LeetCode 高频题思路、代码模板、最优写法数据结构进阶者 重点循环队列原理、栈的实际应用场景复习总结同学 重点代码结构、边界处理、时间复杂度分析本文内容全覆盖LeetCode 622 设计循环队列、LeetCode 20 有效括号两道高频面试题从原理讲解、思路分析、代码实现到细节优化一次性吃透栈与队列最经典算法题型。前置知识回顾学习本文前你需要掌握队列先进先出特性栈后进先出特性数组与链表基本操作Java 集合基础使用本文是栈与队列在算法题中的直接落地难度适中面试出现频率极高。1. 设计循环队列(1) 题目描述设计实现一个循环队列支持以下操作MyCircularQueue(k) 构造器设置队列长度为 kFront() 获取队首元素Rear() 获取队尾元素enQueue(value) 向队列插入元素deQueue() 从队列删除元素isEmpty() 判断队列是否为空isFull() 判断队列是否为满循环队列是一种线性数据结构遵循先进先出并且队尾连接在队首之后形成循环可以充分利用数组空间。(2) 实现思路使用数组实现循环队列定义两个指针front 指向队头rear 指向队尾的下一个位置为了区分空与满我们浪费一个数组空间判空条件front rear判满条件(rear 1) % 数组长度 front所有指针移动都使用取模运算实现循环(3) 代码实现classMyCircularQueue{publicintfront;publicintrear;publicint[]elem;publicMyCircularQueue(intk){elemnewint[k1];}publicbooleanenQueue(intvalue){if(isFull()){returnfalse;}elem[rear]value;rear(rear1)%elem.length;returntrue;}publicbooleandeQueue(){if(isEmpty()){returnfalse;}front(front1)%elem.length;returntrue;}publicintFront(){if(isEmpty()){return-1;}returnelem[front];}publicintRear(){if(isEmpty()){return-1;}intindex(rear0)?elem.length-1:rear-1;returnelem[index];}publicbooleanisEmpty(){returnrearfront;}publicbooleanisFull(){return(rear1)%elem.lengthfront;}}(4) 关键点说明数组长度为 k1浪费一个位置用于区分空与满rear 指向队尾元素的下一个位置方便插入获取队尾元素时需要特殊处理 rear0 的情况所有指针移动都使用取模实现循环避免越界时间复杂度 O(1)所有操作都是常数时间2. 有效的括号(1) 题目描述给定一个只包含()、{}、[]的字符串 s判断字符串是否有效。有效字符串满足左括号必须用相同类型的右括号闭合左括号必须以正确的顺序闭合每个右括号都有对应的左括号(2) 思路一 栈匹配法这是最标准、最推荐、面试最优解法。核心思路遍历字符串遇到左括号直接入栈遇到右括号时如果栈为空直接返回 false取出栈顶元素判断是否匹配匹配则弹出栈顶不匹配返回 false遍历结束后栈必须为空才是有效括号(3) 代码实现classSolution{publicbooleanisValid(Strings){StackCharacterstacknewStack();for(inti0;is.length();i){charchs.charAt(i);if(ch(||ch{||ch[){stack.push(ch);}else{if(stack.isEmpty()){returnfalse;}charch2stack.peek();if((ch)ch2()||(ch}ch2{)||(ch]ch2[)){stack.pop();}else{returnfalse;}}}returnstack.isEmpty();}}(4) 思路二 暴力消除法思路非常简单直观适合理解但效率略低。核心思路不断消除字符串中最内层的合法括号对重复消除()、[]、{}直到无法消除为止最终字符串为空则有效否则无效(5) 代码实现classSolution{publicbooleanisValid(Strings){while(s.contains(())||s.contains([])||s.contains({})){ss.replace((),);ss.replace([],);ss.replace({},);}returns.isEmpty();}}(6) 两种思路对比栈匹配法时间复杂度 O(n)空间复杂度 O(n)面试推荐写法逻辑严谨暴力消除法代码极简时间复杂度较高适合理解思路不推荐面试优先写核心考点总结设计循环队列循环队列依靠取模实现循环结构判空 front rear判满 (rear1) % len front数组实现浪费一个空间区分空满高频面试手写题有效括号栈的最经典应用场景左括号入栈右括号匹配栈顶最终栈必须为空面试必须熟练掌握写在最后循环队列与有效括号是栈与队列中最经典、最高频的两道算法题几乎是数据结构面试必考题。循环队列考察你对队列、数组、指针、循环结构的理解。有效括号考察你对栈后进先出特性的实际运用。掌握这两道题代表你真正理解了栈与队列的核心思想能够在面试中轻松应对同类题型。后续我们将继续带来栈与队列的更多经典算法题最小栈、逆波兰表达式求值、滑动窗口最大值、用栈实现队列、用队列实现栈等高频面试题型。

相关文章:

栈与队列经典算法题精讲(一):循环队列·有效括号·面试高频原题全解析

🏠个人主页:黎雁 🎬作者简介:C/C/JAVA后端开发学习者 ❄️个人专栏:C语言、数据结构(C语言)、EasyX、JAVA、数据结构与算法(JAVA)、游戏、规划、程序人生 ✨ 从来绝巘须孤…...

如何定义一个 IoT 产品的核心用户价值

——面向高级产品负责人的系统方法 目录 一、什么是 IoT 产品的核心用户价值 二、IoT用户价值的三层结构 第一层:功能价值(Functional Value) 第二层:场景价值(Scenario Value) 第三层:情感…...

红黑树介绍

红黑树(Red-Black Tree)是一种自平衡的二叉查找树,它是由 Rudolf Bayer 在 1972 年发明的。它在每个节点上增加一个存储位表示节点的颜色,可以是红色或黑色,通过对任何一条从根到叶子的路径上各个节点的颜色进行约束&a…...

【研知有术论文发表】投中真香!三区园艺学性价比SCI期刊推荐,巨好投

ISSN:0014-2336五年影响因子:1.8收录数据库:SCIE、Scopus等丨期刊简介《EUPHYTICA》是一本由Springer Netherlands出版的国际性学术期刊,创刊于1952年,在植物育种领域历史悠久,非OA期刊。目前位于农林科学大…...

Zemax转CODEV文件

点击确定,重新打开zemax打开源文件,另存为.zmx打开CODE V此处粘贴.zmx文件的地址,并且注意删除引号...

复制一个链接,1分钟提取视频全文——视频转文字我用了半年

信息焦虑这件事,天花板很高。每天刷视频、收藏课程、囤教程,感觉自己在学习。但一周后,能复述出来的内容——不超过 3 条。大多数人的卡点不是「没有好内容」。是内容进来了,但没有真正被处理过。这篇内容,想认真说一个…...

Redis(Remote Dictionary Server)的应用场景与使用方法(基于内存的高性能NoSQL数据库,支持持久化,并提供多种数据结构)RDB、AOF、主从复制、哨兵、集群

文章目录Redis 的应用场景与使用方法详解一、Redis 简介二、Redis 典型应用场景1 缓存(Cache)2 分布式会话(Session 共享)3 分布式锁4 消息队列5 排行榜系统6 限流系统7 实时统计三、Redis 基本使用方法1 安装 Redis2 基本数据操作…...

德电推出全球首个“多轨物联网漫游”:地面与太空首次“无缝切换”

2026年2月13日,德国电信(Deutsche Telekom)在巴塞罗那世界移动通信大会召开前夕宣布:该公司已成为全球首家提供多轨物联网(IoT)漫游服务的移动网络运营商。这意味着物联网设备可以在地面移动网络与卫星网络…...

【案例共创】华为云码道生成表格提取助手,百份Word表格一键提取,秒变Excel!

本案例由开发者:banjin提供,华为开发者空间案例中心优化并收录。 最新案例动态,请查阅【案例共创】华为云码道生成表格提取助手,百份Word表格一键提取,秒变Excel!。小伙伴们快来进行实操吧! 一…...

OpenClaw Token深度优化:节省50%+成本

OpenClaw作为一款强大的AI自动化工具,其Token消耗问题已成为许多用户面临的实际挑战。一个典型的OpenClaw会话可能从最初的几百Token迅速增长到几万甚至几十万,导致成本飙升和响应延迟。本文将从技术原理、配置优化和使用习惯三个维度,提供一…...

深度优先搜索(dfs)

深度优先搜索 1 什么是图的遍历 图的遍历(Graph Traversal): 指的是从图中的某一个顶点开始,按照一定规则访问图中的所有顶点,并且每个顶点只访问一次的过程。 简单理解: 就像在一个由很多点和线组成的网络…...

JAVA进阶-锁

1.悲观锁和乐观锁悲观锁:在修改数据时,一定有别的线程来使用,一定会发生并发冲突,所以在获取数据的时候会加锁。JAVA中的synchronized和lock都是悲观锁。乐观锁:在修改数据时,一定没有别的线程来使用&#…...

Cesium快速入门到精通系列教程二十三:综合

一、viewer.cesiumWidget.container.appendChild() 把你自定义的 HTML 元素(弹窗、按钮、图标等)添加到 Cesium 画布的容器里,让它显示在 3D 地球场景上。 // 1. 创建一个自定义弹窗 div const infoDiv = document.createElement(div); infoDiv.style.position = absolute…...

JAVA数据结构 DAY8-堆

本系列可作为JAVA学习系列的笔记,文中提到的一些练习的代码,小编会将代码复制下来,大家复制下来就可以练习了,方便大家学习。 点赞关注不迷路!您的点赞、关注和收藏是对小编最大的支持和鼓励! 系列文章目录…...

2026-03-17 每日作战任务:RAG 语料高效切分(Text Chunking)与处理

2026-03-17 每日作战任务:RAG 语料高效切分(Text Chunking)与处理每日学习代码关联仓库地址:https://gitee.com/lqx_learn/java-ai.git一、 业务场景 昨天我们运用 JDK 17 的 FileChannel 与 MappedByteBuffer,实现了大…...

Android Studio 安装教程(Windows 超详细图文版)

本教程将从 准备工作→ 下载 → Android Studio安装 → SDK配置 → 创建第一个项目 全流程讲解,适合 AndroidAndroid开发零基础入门。 一、Android Studio简介 Android Studio 是 Google 官方推出的 Android应用开发IDE,用于开发 Android APP。它基于 I…...

SPI子系统源码剖析--(2)Spi_Master驱动框架

1. spi_masterspi_master对应spi控制器,是对引脚的管理,同时可以通过cs引脚选择从设备发送消息2. SPI传输概述1.1 数据组织方式使用SPI传输时,最小的传输单位是"spi_transfer",对于一个设备,可以发起多个spi…...

速看!!安全员ABC证靠谱的查询方式有哪几种?分别是怎么查询呢?

很多人报考安全员都会有疑虑,担心自己考的安全员不是正规的,考出来没有用,不能在正规网站查询到,今天星禾智慧老师告诉您安全员ABC靠谱的查询方式,保证你拿到的证书不再有假🍎🧤一、湖北安全员A…...

软件综合项目-mqtt

依赖的第三方库https:CURL库SQLite:SQLite库MQTT库:Paho库MQTT属于应用层协议,支持其实现的传输协议为TCPHTTPS适用于传输的数据量比较大情况,传输方式为字符单向传输MQTT传输数量比较小,二进制传输&#x…...

2026人事系统排行榜:一体化+AI,11家企业谁是TOP选手?

2026年一体化AI人事系统TOP11深度评测:谁领跑AI原生时代?2026年,HR SaaS行业已全面迈入AI原生架构全链路一体化的竞争新阶段。企业对人系统的核心诉求,从“功能叠加AI”进化为“从底层架构融入AI”,要求AI能贯穿招聘、…...

ssm+java2026年毕设社区疫情管理系统【源码+论文】

本系统(程序源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、选题背景关于社区公共卫生应急管理问题的研究,现有研究主要以宏观层面的城市公共卫生体系构建、重大疫情应急响应机制为主&…...

【亲测好用】数据权限管理能力演示

导言: 作为一名企业管理者或业务人员,您是否曾遇到过这样的烦恼:(1)销售人员看到了不该看的财务数据?(2)合作伙伴访问了超出约定范围的信息?(3)不…...

Paperzz AI 毕业论文写作:从选题到成文,本科论文高效交付的智能解决方案

Paperzz-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿paperzz - 毕业论文-AIGC论文检测-AI智能降重-ai智能写作https://www.paperzz.cc/dissertation 在本科毕业论文的创作路上,从确定选题到完成初稿,从文献梳理到格式规范,每…...

Paperzz AI 初稿引擎:重构本科毕业论文写作,从选题到终稿一站式高效通关

Paperzz-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿paperzz - 毕业论文-AIGC论文检测-AI智能降重-ai智能写作https://www.paperzz.cc/dissertation 引言 本科毕业论文的创作,是大学生学业生涯的收官之战,也是对专业知识与学术能力的综…...

泰思特电子分享_EMC测试电流探头选型差异性及影响因素探讨

本文主要进行EMC测试电流探头选型差异性及影响因素探讨,围绕电流探头核心技术指标进行介绍,根据EMC测试不同标准、不同测试项目对电流探头的需求差异,分析了电流探头选型的关键影响因素以及国内外主流厂家不同型号产品的对比,为EM…...

基于能量分配的光伏混合储能系统仿真模型 ①光伏:采用mppt控制实现最大功率跟踪 ②蓄电池与超...

基于能量分配的光伏混合储能系统仿真模型 ①光伏:采用mppt控制实现最大功率跟踪 ②蓄电池与超级电容:构成混合储能系统,电池实现连续功率供应,超级电容提供瞬态功率供应 ③拓扑:光伏DC/DC采用boost变换器,混…...

APM使用LUA脚本发送实现遥控器PWM信号输出CAN协议信号

需求:由于舵机是CAN总线舵机,需实现APM开源飞控遥控器输入PWM通道到CAN的发送。 方法1:修改APM固件源码,编译,运行,测试。实现复杂。 方法2:使用lua脚本。实现简单 目前采用方法2,使…...

LangGraph 核心概念

LangGraph是LangChain 生态的 “进阶编排框架”,是 AgentExecutor升级版,基于图结构解决复杂工作流 / 多智能体问题,兼容 LangChain 所有组件。AgentExecutor 是「单智能体固定循环执行器」,适合简单线性任务;LangGrap…...

零基础搭建免费IP代理池:从原理到实战的保姆级指南

在数据驱动型业务中,很多企业都会接触到“IP代理池”这一概念。尤其是在进行公开数据整合、市场信息监测等场景时,单一IP往往难以支撑持续稳定的请求需求,这时代理池就成为重要基础设施。但对于初学者来说,“搭建代理池”听起来复…...

努力学习了一辈子,突然发现学习没什么用了

从小,我是众人眼中的 “学习标兵”。到现在,每天一节法语,一篇英语阅读,依然雷打不动:但最近几个月,随着老杨的“眨眼猫会务智能体”中对报名、签到、查座、AI会务助理的全面 “AI化改造”,老杨…...