学习笔记|LeetCode 739 每日温度:从暴力枚举到单调栈线性最优解
学习笔记LeetCode 739 每日温度从暴力枚举到单调栈线性最优解一、问题回顾给定每日气温数组temperatures要求输出等长数组ansans[i]表示第i天之后首次出现更高气温需要等待的天数若后续无更高气温值为 0。问题本质对数组中每个元素找到右侧第一个更大元素并计算下标间距。二、基础实现暴力枚举思路与局限最直观的思路是暴力双重循环外层遍历每一天i内层从i1向后遍历找到第一个j满足temperatures[j] temperatures[i]记录j-i遍历结束未找到则赋值 0。// 暴力实现示意vectorintdailyTemperatures(vectorinttemperatures){intntemperatures.size();vectorintans(n,0);for(inti0;in;i){for(intji1;jn;j){if(temperatures[j]temperatures[i]){ans[i]j-i;break;}}}returnans;}局限分析时间复杂度O(N²)当数组长度较大如 10⁴ 及以上时循环次数会急剧增加出现明显性能瓶颈同时内层循环存在大量重复比较前序元素的比较结果未被复用计算效率较低。三、优化方向状态复用与单调栈引入暴力解法的核心问题是每个元素会被多次比较没有记录「尚未找到更大值的元素」的状态。观察遍历过程我们从左到右遍历先遍历到的元素需要等待后遍历的元素来匹配「更大值」这种「先等待、后匹配」的场景适合用栈保存未完成匹配的元素状态为了保证匹配效率栈需要维持单调递减的特性栈中元素从栈底到栈顶不递增确保每次新元素入栈时能直接找到所有可匹配的栈内元素。四、单调栈解法逻辑、实现与复杂度核心思路栈中存储下标而非温度值既可以通过下标获取温度又能直接计算等待天数避免额外存储维护单调递减栈栈内下标对应的温度自底向上递减遍历逻辑若当前温度 栈顶下标对应温度说明栈顶元素找到「右侧第一个更大值」弹出栈顶下标计算并赋值答案重复上述过程直到栈为空或栈顶温度不小于当前温度再将当前下标入栈。完整实现CclassSolution{public:vectorintdailyTemperatures(vectorinttemperatures){intntemperatures.size();vectorintans(n,0);stackintst;for(inti0;in;i){// 栈非空且当前温度更高匹配栈顶元素while(!st.empty()temperatures[st.top()]temperatures[i]){intidxst.top();ans[idx]i-idx;st.pop();}st.push(i);}returnans;}};复杂度分析时间复杂度 O(N)每个元素仅入栈、出栈各 1 次while 循环的总执行次数与数组长度线性相关无冗余计算空间复杂度 O(N)最坏情况下数组严格递减栈存储全部元素下标空间与输入规模成正比。五、工程实现中的细节与考量存储下标而非数值若存储温度值还需额外记录对应下标增加内存开销与寻址步骤直接存下标一次存储即可满足「比较温度」「计算天数」两个需求是更简洁的工程选择。栈结构的选型标准库stack底层默认依赖deque若追求更优的内存连续性可改用vector模拟栈用push_back/pop_back实现在高频调用场景下内存局部性更优。边界与特殊情况空数组、单元素数组直接返回全 0 数组代码天然兼容重复温度栈的递减特性可正确处理仅「严格更大」时匹配符合题目要求。与实际业务场景的适配该思路不局限于气温问题可直接迁移到时序数据股价、湿度、流量等的「下一个更大值」场景是处理单向时序匹配问题的通用线性解法。六、知识迁移与小结本题是**单调栈求解「下一个更大/更小元素」**的典型入门题核心是用栈保存「未完成匹配的状态」通过单调特性避免重复比较将平方复杂度优化为线性工程上优先考虑状态复用与存储效率减少冗余计算与内存开销掌握这一思路后可快速解决同类问题如柱状图中最大矩形、接雨水、下一个更大元素 I/II 等。

相关新闻

真实复盘影子目录攻击——绕过WordPress固定链接劫持的手法

真实复盘影子目录攻击——绕过WordPress固定链接劫持的手法

上个月我们接触到一个客户反馈的问题:网站打开一切正常,访客也看不出异常,但 Google 搜索结果里显示的却不是正常标题和摘要,而是赌场、博彩、药品之类的垃圾内容。更离谱的是,这些内容没有出现在首页或文章页&#xf…

2026/5/17 5:18:37 阅读更多 →
基于django的社区设备报修住户反馈智能预测系统

基于django的社区设备报修住户反馈智能预测系统

一、选题背景与意义 随着我国城市化进程不断加快,住宅小区、公寓楼、工业园区等社区数量持续增加,社区内公共设施与智能设备日益普及,包括电梯、门禁、监控、照明、供水供电设备、消防设施、健身器材等。这些设备直接关系到住户的居住安全、生…

2026/7/5 11:41:35 阅读更多 →
基于SpringBoot+微信小程序的“智慧家园”环保宣传微信小程序任务书

基于SpringBoot+微信小程序的“智慧家园”环保宣传微信小程序任务书

基于SpringBoot微信小程序的“智慧家园”环保宣传微信小程序任务书 一、任务背景与目的 当前,我国生态文明建设进入攻坚阶段,环保理念普及、全民环保行动参与成为推动绿色发展的关键。但当前环保宣传仍存在诸多痛点:宣传方式单一,…

2026/7/3 3:48:06 阅读更多 →

最新新闻

MC6470与PIC24FJ256GB210的6DOF传感器融合与运动控制实战

MC6470与PIC24FJ256GB210的6DOF传感器融合与运动控制实战

1. MC6470与PIC24FJ256GB210的硬件协同架构解析MC6470作为一款6自由度惯性测量单元(6DOF IMU),其核心价值在于集成了三轴加速度计和三轴磁力计。在实际工程应用中,这款传感器通过I2C接口与主控芯片通信时,有两个关键特性需要特别注意&#xf…

2026/7/6 7:47:16 阅读更多 →
AD74413R与PIC18F85J50高精度工业控制方案解析

AD74413R与PIC18F85J50高精度工业控制方案解析

1. AD74413R与PIC18F85J50组合方案概述在工业控制和仪器仪表领域,同时需要高精度模拟量采集和输出的场景非常普遍。ADI公司的AD74413R是一款高度集成的混合信号前端芯片,内部包含1个16位Σ-Δ型ADC和4个13位DAC,通过灵活配置可以同时实现模拟…

2026/7/6 7:45:15 阅读更多 →
STM32与LTC6904构建高精度可编程时钟源方案

STM32与LTC6904构建高精度可编程时钟源方案

1. 项目背景与核心价值在嵌入式系统开发中,精确的时序控制往往决定着项目的成败。LTC6904这颗来自ADI的硅振荡器芯片,配合STM32F103RC这款经典Cortex-M3内核MCU,能够构建出从1kHz到68MHz范围内抖动低于0.3%的方波信号源。这种组合方案特别适合…

2026/7/6 7:41:14 阅读更多 →
IPC-2152 标准实战:3个关键参数与5种PCB场景下的走线/过孔通流计算

IPC-2152 标准实战:3个关键参数与5种PCB场景下的走线/过孔通流计算

IPC-2152标准实战:3个关键参数与5种PCB场景下的走线/过孔通流计算当你在设计一块需要承载大电流的PCB时,是否曾为选择合适的走线宽度和过孔尺寸而纠结?过宽的走线会占用宝贵的布线空间,而过窄的走线又可能导致过热甚至烧毁。IPC-2…

2026/7/6 7:39:13 阅读更多 →
AD5593R与PIC18F46K80的嵌入式信号处理系统设计

AD5593R与PIC18F46K80的嵌入式信号处理系统设计

1. AD5593R与PIC18F46K80的硬件协同设计AD5593R作为一款8通道12位精度的ADC/DAC转换器,与PIC18F46K80微控制器的组合在嵌入式信号处理领域展现出独特的优势。这个组合的核心价值在于实现了模拟信号采集与数字信号处理的无缝衔接。1.1 芯片选型与技术参数解析AD5593R…

2026/7/6 7:37:13 阅读更多 →
PIC18F85K22外扩EEPROM存储方案与I2C接口优化

PIC18F85K22外扩EEPROM存储方案与I2C接口优化

1. 为什么需要外扩EEPROM存储空间?在嵌入式系统开发中,PIC18F85K22这类微控制器虽然功能强大,但其内部存储资源往往有限。以PIC18F85K22为例,其Flash程序存储器最大为64KB,RAM为3.8KB,而内部EEPROM仅有1KB。…

2026/7/6 7:37:13 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻