算法面试——栈与队列:单调栈、双栈实现队列
栈和队列是面试高频基础结构重点考察单调栈和用栈实现队列这两类变形题。这篇把经典题全部整理出来代码直接可跑。一、用两个栈实现队列队列先进先出栈后进先出。用两个栈入队栈 出队栈。classMyQueue{DequeIntegerinStacknewArrayDeque();DequeIntegeroutStacknewArrayDeque();publicvoidpush(intx){inStack.push(x);}publicintpop(){if(outStack.isEmpty()){// 把入队栈全部倒入出队栈顺序就反过来了while(!inStack.isEmpty()){outStack.push(inStack.pop());}}returnoutStack.pop();}publicintpeek(){if(outStack.isEmpty()){while(!inStack.isEmpty()){outStack.push(inStack.pop());}}returnoutStack.peek();}publicbooleanempty(){returninStack.isEmpty()outStack.isEmpty();}}摊还复杂度 O(1)每个元素最多被倒两次入栈出栈。二、有效的括号publicbooleanisValid(Strings){DequeCharacterstacknewArrayDeque();for(charc:s.toCharArray()){if(c(||c[||c{){stack.push(c);}else{if(stack.isEmpty())returnfalse;chartopstack.pop();if(c)top!()returnfalse;if(c]top![)returnfalse;if(c}top!{)returnfalse;}}returnstack.isEmpty();}三、单调栈下一个更大元素核心思想栈内元素单调递减遇到更大元素就出栈结算。// LeetCode 739 每日温度返回每个元素后面第一个更大元素的距离publicint[]dailyTemperatures(int[]temperatures){intntemperatures.length;int[]resultnewint[n];DequeIntegerstacknewArrayDeque();// 存下标for(inti0;in;i){// 当前温度比栈顶高 → 栈顶出栈它的答案就是 iwhile(!stack.isEmpty()temperatures[i]temperatures[stack.peek()]){intidxstack.pop();result[idx]i-idx;}stack.push(i);}returnresult;// 没出栈的默认0说明后面没有更大温度}单调栈模板总结找右边第一个更大 → 从左往右栈单调递减 找左边第一个更大 → 从右往左栈单调递减 找右边第一个更小 → 从左往右栈单调递增四、最小栈实现一个栈支持 O(1) 获取栈内最小值。classMinStack{DequeIntegerdatanewArrayDeque();DequeIntegerminnewArrayDeque();// 辅助栈同步维护最小值publicvoidpush(intval){data.push(val);// 辅助栈顶存当前最小值if(min.isEmpty()||valmin.peek()){min.push(val);}else{min.push(min.peek());}}publicvoidpop(){data.pop();min.pop();}publicinttop(){returndata.peek();}publicintgetMin(){returnmin.peek();}}总结栈和队列题目核心就两类括号匹配类直接模拟和单调栈类下一个更大/更小元素。单调栈记住口诀“栈内有序、出栈结算”几乎所有单调栈题都能套模板。时间复杂度 O(n) 单次遍历比暴力 O(n²) 高效得多。 觉得有用的话点赞 关注【张老师技术栈】吧

相关新闻

华凌N8HE1Ⅱ大2匹空调拆解:神机二代配置解析与选购指南

华凌N8HE1Ⅱ大2匹空调拆解:神机二代配置解析与选购指南

最近在帮朋友选购空调时,发现很多人在“神机”和“二代神机”之间纠结,特别是华凌的 KFR-50GW/N8HE1Ⅱ 这款大2匹挂机。网上信息零散,参数对比不直观,很多人不清楚所谓的“再降价”背后,配置到底有没有缩水&#xff0c…

2026/11/14 20:46:23 阅读更多 →
Python 多线程与多进程并发编程实战

Python 多线程与多进程并发编程实战

Python 并发编程绕不开 GIL,很多人被它坑过。这篇讲清多线程、多进程怎么选、怎么写,附爬虫和 CPU 密集型两个实战例子。 一、多线程:IO 密集型用 thread import threading import timedef download(url):print(f"开始下载: {url}"…

2026/11/14 7:50:13 阅读更多 →
UML建模在在线购物系统开发中的应用与实践

UML建模在在线购物系统开发中的应用与实践

1. 为什么在线购物系统需要UML建模在开发一个在线购物系统时,UML(统一建模语言)就像建筑师的蓝图一样不可或缺。想象一下,你要建造一栋大楼,没有设计图纸就直接开工,结果会怎样?同样的道理&…

2026/11/9 23:00:13 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/14 5:13:29 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/14 5:13:29 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/14 5:13:29 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/13 22:08:41 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/14 2:41:37 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/14 5:13:29 阅读更多 →

日新闻

周新闻

月新闻