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

单调栈入门到精通:每日温度 柱状图中最大的矩形

目录一、入门题739. 每日温度中等题目描述核心思路单调栈的本质代码实现Java复杂度分析二、进阶题84. 柱状图中最大的矩形困难题目描述核心思路用单调栈找边界解题步骤代码实现Java复杂度分析三、两道题的核心模板总结通用解题步骤今天我们用两道经典的「单调栈」题目带你从入门到精通这个算法模板。入门题LeetCode 739. 每日温度进阶题LeetCode 84. 柱状图中最大的矩形这两道题是单调栈的 “黄金模板”搞懂它们面试中 90% 的单调栈题目都能迎刃而解。一、入门题739. 每日温度中等题目描述给定一个整数数组temperatures表示每天的温度返回一个数组answer其中answer[i]是指对于第i天下一个更高温度出现在几天后。如果气温在这之后都不会升高请在该位置用0来代替。示例输入:temperatures [73,74,75,71,69,72,76,73]输出:[1,1,4,2,1,1,0,0]核心思路单调栈的本质这道题的本质是找「下一个比当前大的数」。暴力解法是双重循环时间复杂度 O (n²)但我们可以用单调栈把它优化到 O (n)。单调栈的核心逻辑我们维护一个栈栈中元素是温度的索引并且它们对应的温度是单调递减的。遍历每一天的温度如果当前温度 栈顶索引对应的温度说明找到了栈顶元素的 “下一个更高温度”。弹出栈顶元素计算两者的索引差就是答案。重复这个过程直到栈顶元素对应的温度 当前温度再把当前索引入栈。代码实现Javajava运行public int[] dailyTemperatures(int[] temperatures) { int n temperatures.length; int[] answer new int[n]; // 栈中存储索引保证索引对应的温度单调递减 DequeInteger stack new LinkedList(); for (int i 0; i n; i) { while (!stack.isEmpty() temperatures[i] temperatures[stack.peek()]) { int prevIndex stack.pop(); answer[prevIndex] i - prevIndex; } stack.push(i); } return answer; }复杂度分析时间复杂度O (n)每个元素最多入栈和出栈一次。空间复杂度O (n)最坏情况下所有元素都入栈。二、进阶题84. 柱状图中最大的矩形困难题目描述给定n个非负整数用来表示柱状图中各个柱子的高度。每个柱子彼此相邻且宽度为 1。求在该柱状图中能够勾勒出来的矩形的最大面积。核心思路用单调栈找边界这道题的关键是以每一根柱子的高度为矩形的高找到它能扩展的最大宽度。对于高度为h[i]的柱子我们需要找到左边第一个比它矮的柱子的索引left。右边第一个比它矮的柱子的索引right。那么以h[i]为高的矩形的宽度就是right - left - 1面积就是h[i] * (right - left - 1)。而单调栈正是解决 “找左右边界” 的神器。解题步骤哨兵优化在数组首尾各加一个高度为 0 的哨兵避免栈为空或无法出栈的边界情况。维护单调递增栈栈中存储柱子的索引保证它们对应的高度是单调递增的。遍历计算面积当遇到一个比栈顶元素矮的柱子时栈顶元素找到了它的 “右边界”。弹出栈顶元素cur此时的栈顶就是它的 “左边界”。计算以cur为高的矩形面积并更新最大值。代码实现Javajava运行public int largestRectangleArea(int[] heights) { // 哨兵优化首尾加 0 int n heights.length; int[] newHeights new int[n 2]; System.arraycopy(heights, 0, newHeights, 1, n); DequeInteger stack new LinkedList(); int maxArea 0; for (int i 0; i newHeights.length; i) { // 维护单调递增栈 while (!stack.isEmpty() newHeights[i] newHeights[stack.peek()]) { int curIndex stack.pop(); int height newHeights[curIndex]; int width i - stack.peek() - 1; maxArea Math.max(maxArea, height * width); } stack.push(i); } return maxArea; }复杂度分析时间复杂度O (n)每个元素最多入栈和出栈一次。空间复杂度O (n)最坏情况下所有元素都入栈。三、两道题的核心模板总结这两道题其实是单调栈的两种典型应用场景表格题目栈的单调性核心作用每日温度单调递减栈找下一个更大元素柱状图最大矩形单调递增栈找左右第一个更小元素通用解题步骤明确问题你要找的是 “下一个更大 / 更小”还是 “左右边界”选择单调性找下一个更大元素用单调递减栈。找下一个更小元素用单调递增栈。处理边界使用哨兵在数组首尾加 0是简化代码的常用技巧。。

相关文章:

单调栈入门到精通:每日温度 柱状图中最大的矩形

目录 一、入门题:739. 每日温度(中等) 题目描述 核心思路:单调栈的本质 代码实现(Java) 复杂度分析 二、进阶题:84. 柱状图中最大的矩形(困难) 题目描述 核心思路…...

【VS Code Dev Containers 性能调优黄金法则】:20年云原生开发专家亲授,实测启动提速3.8倍、内存降低62%的7大硬核配置技巧

更多请点击: https://intelliparadigm.com 第一章:Dev Containers 性能调优的底层逻辑与评估体系 Dev Containers 的性能瓶颈往往并非来自容器本身,而是源于宿主机资源调度、文件系统挂载策略、网络命名空间隔离强度以及 VS Code Remote-SSH…...

别再瞎调参数了!Vivado FFT IP核配置保姆级避坑指南(附仿真源码)

Vivado FFT IP核实战:从参数配置到结果分析的完整避坑手册 在数字信号处理领域,快速傅里叶变换(FFT)是实现频域分析的核心算法。对于FPGA开发者而言,Vivado提供的FFT IP核既是一个强大的工具,也是一个充满陷…...

物理AI推动人机协作迈向新阶段研究报告凯捷 2026_01

这份凯捷 2026 年《物理 AI:推动人机协作迈向新阶段》报告核心结论:物理 AI 正让机器人从预编程工具变成可感知、自适应、能学习的现实世界智能合作者,已到规模化拐点,将重构各行业生产力与人机协作模式。一、核心定义&#xff1a…...

免费音乐下载终极指南:轻松获取全网音乐资源的完整教程

免费音乐下载终极指南:轻松获取全网音乐资源的完整教程 【免费下载链接】MusicDownload 歌曲下载 项目地址: https://gitcode.com/gh_mirrors/mu/MusicDownload 想要随时随地畅听喜爱的音乐却受限于网络环境?MusicDownload作为一款完全免费开源的…...

3分钟搞定音乐标签乱码:Music Tag Web繁简转换实战指南

3分钟搞定音乐标签乱码:Music Tag Web繁简转换实战指南 【免费下载链接】music-tag-web 音乐标签编辑器,可编辑本地音乐文件的元数据(Editable local music file metadata.) 项目地址: https://gitcode.com/gh_mirrors/mu/music…...

【收藏备用|2026年版】小白程序员必看!企业AI转型避坑+大模型从入门到实战全套指南

本文整理了华夏基石人工智能咨询专家潘晓蕾的企业AI转型实战干货,结合2026年大模型行业最新趋势,针对当前企业AI转型中最易踩的五大误区,搭配六大可直接落地的破解方案,融合真实万亿级企业转型案例,帮小白快速读懂企业…...

【2026年版|建议收藏】小白/程序员转型AI工程师,6个月从入门到落地全路线图

现在一提到“AI 工程师”,很多小白和程序员的第一反应都是“从零训练百亿参数大模型”,下意识觉得门槛高到遥不可及,甚至直接望而却步。但2026年行业的真实需求恰恰相反——目前市场最紧缺的,是能基于现有大模型,快速搭…...

[Rust][ARM64] 九、ARM Trusted Firmware(ATF)——信任链与 PSCI

系列进度 第八篇:加载下一阶段(SD 卡 + jump_to) 第九篇(本文):ARM Trusted Firmware(ATF) 第十篇:移植 Rust OS 什么是 ARM Trusted Firmware? ARM Trusted Firmware(现更名为 Trusted Firmware-A,TF-A)是一个开源的 AArch64 固件参考实现,由 ARM 官方维护。它…...

[Rust][ARM64] 八、加载下一阶段——从 SD 卡读取内核并移交控制权

系列进度 第七篇:中断处理与异常向量表 第八篇(本文):加载下一阶段(SD 卡 + jump_to) 第九篇:ARM Trusted Firmware(ATF) BootROM 的最终使命 一个完整的裸机 BootROM 流程: GPU 固件(start4.elf)└→ 加载 kernel8.img 到 0x80000└→ 我们的裸机 BootROM├ 初始…...

[Rust][ARM64] 七、中断处理与异常向量表

系列进度 第六篇:MMU 与页表 第七篇(本文):中断处理与异常向量表 第八篇:加载下一阶段(SD 卡 + jump_to) AArch64 异常模型 AArch64 把所有"打断正常执行流"的事件统称为异常(Exception),分四类: 类型 说明 例子 同步异常 执行指令时产生,立即触发 缺页…...

【2026最新】五一假期远程办公神器:3分钟搞定企业内网接入的终极指南

五一假期倒计时!远程办公必备神器EasyConnect全攻略 随着五一假期临近,你是否也在盘算着如何优雅地提前离开办公室,或是晚几天再回到工位?别急!今天要介绍的这款企业级远程接入神器EasyConnect,将让你实现…...

Py-Scrcpy-Client编译性能优化:5种高效解决方案深度解析

Py-Scrcpy-Client编译性能优化:5种高效解决方案深度解析 【免费下载链接】py-scrcpy-client 项目地址: https://gitcode.com/gh_mirrors/py/py-scrcpy-client 在Android设备镜像开发领域,Py-Scrcpy-Client作为基于Python的屏幕镜像客户端&#x…...

智能代理搜索能力评估:DeepWideSearch框架解析

1. DeepWideSearch:智能代理搜索能力的基准测试框架在信息爆炸的时代,如何让AI系统像人类一样进行深度思考和广泛检索,成为智能代理(Agent)技术的核心挑战。DeepWideSearch正是为解决这一问题而设计的基准测试框架&…...

视觉语言模型个性化技术:CoViP框架解析与应用

1. 视觉语言模型个性化技术现状与挑战视觉语言模型(Vision-Language Models, VLMs)作为多模态人工智能的核心技术,近年来在图像描述生成、视觉问答等任务上取得了显著进展。然而,现有模型在个性化场景中仍面临根本性挑战——无法有…...

DeepSeek开源项目成功之道:技术策略与社区运营

1. 深度拆解DeepSeek现象级成功的三大支柱去年偶然在GitHub Trending看到DeepSeek项目时,其星标增长速度让我这个老开源人都感到震惊。这个最初由几名工程师发起的项目,在短短半年内就成长为该领域基础设施级别的存在。经过对其发展轨迹的复盘&#xff0…...

5分钟快速上手:FanControl风扇控制软件的终极中文指南

5分钟快速上手:FanControl风扇控制软件的终极中文指南 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa…...

Windows 10安卓子系统高效安装指南:无需升级Win11的完整解决方案

Windows 10安卓子系统高效安装指南:无需升级Win11的完整解决方案 【免费下载链接】WSA-Windows-10 This is a backport of Windows Subsystem for Android to Windows 10. 项目地址: https://gitcode.com/gh_mirrors/ws/WSA-Windows-10 还在为Windows 10无法…...

论文降重新纪元:书匠策AI,一键解锁学术纯净秘籍

在学术探索的征途中,论文写作无疑是一座巍峨的山峰,而降重与去除AIGC(人工智能生成内容)痕迹,则是攀登这座山峰时必须跨越的两道险峻关卡。传统降重方法,如同在迷雾中摸索前行,既耗时又费力&…...

OMR转换时间时区后返回

class ConvertTZ(Func):function CONVERT_TZoutput_field models.DateTimeField()# 支持多种调用方式def __init__(self, expression, from_tz, to_tz):super(ConvertTZ, self).__init__(expression,Value(from_tz),Value(to_tz))使用 F() 表达式或字段名进行时区转换 在 Dj…...

FloPy:Python地下水流建模的终极指南

FloPy:Python地下水流建模的终极指南 【免费下载链接】flopy A Python package to create, run, and post-process MODFLOW-based models. 项目地址: https://gitcode.com/gh_mirrors/fl/flopy FloPy 是一个强大的 Python 包,专门用于创建、运行和…...

如何用Revelation光影包打造电影级Minecraft世界:终极配置指南

如何用Revelation光影包打造电影级Minecraft世界:终极配置指南 【免费下载链接】Revelation An explorative shaderpack for Minecraft: Java Edition 项目地址: https://gitcode.com/gh_mirrors/re/Revelation 想让你的Minecraft方块世界瞬间升级为电影大片…...

ESPIRE:机器人空间推理评估新基准

1. 项目概述:空间推理基准ESPIRE的设计理念在机器人操作和具身智能领域,空间推理能力是智能体与物理世界交互的基础核心。传统评估方法主要依赖静态图像的多选题测试(如VQA),这种范式存在三个根本性缺陷:首…...

FineCat-NLI:动态注意力与对抗训练提升NLI性能

1. 项目概述FineCat-NLI这个项目名称直译为"精细分类-自然语言推理",从命名就能看出其核心目标:通过精细化的分类方法提升自然语言推理(NLI)编码器的性能表现。NLI作为自然语言处理(NLP)领域的基…...

Sigil插件系统技术解析:Python驱动的电子书编辑自动化框架

Sigil插件系统技术解析:Python驱动的电子书编辑自动化框架 【免费下载链接】Sigil Sigil is a multi-platform EPUB ebook editor 项目地址: https://gitcode.com/gh_mirrors/si/Sigil Sigil作为一款跨平台的EPUB电子书编辑器,其插件系统基于Pyth…...

DMVAE:基于分布匹配的变分自编码器改进方法

1. DMVAE:突破传统VAE限制的分布匹配新范式在计算机视觉领域,变分自编码器(VAE)长期以来面临着"Tokenizer困境"——如何在保持图像重建质量的同时,使潜在空间具备良好的可建模性。传统VAE采用高斯先验的KL散…...

3分钟搞定重复工作:KeymouseGo鼠标键盘自动化终极指南

3分钟搞定重复工作:KeymouseGo鼠标键盘自动化终极指南 【免费下载链接】KeymouseGo 类似按键精灵的鼠标键盘录制和自动化操作 模拟点击和键入 | automate mouse clicks and keyboard input 项目地址: https://gitcode.com/gh_mirrors/ke/KeymouseGo 你是否厌…...

AI Agent失败率20%的真相:工程分层才是关键,而非提示词

文章指出AI Agent失败率高的原因并非提示词不佳,而是工程分层没做对。文章提出了三层工程体系:Prompt Engineering(与模型沟通)、Context Engineering(信息流管理)和Harness Engineering(系统可…...

DeadLibrary:用确定性编译器解决AI代码生成的不稳定性

1. 项目概述:当AI助手遇上确定性代码生成如果你和我一样,在过去一年里深度使用过Cursor、Claude Code或者Windsurf这类AI编程助手来开发Angular应用,那你一定对那种“薛定谔的代码质量”深有体会。你满怀期待地输入“创建一个带有表单验证的用…...

FreeMoCap开源项目:从零成本到专业级的3D动作捕捉革命

FreeMoCap开源项目:从零成本到专业级的3D动作捕捉革命 【免费下载链接】freemocap Free Motion Capture for Everyone 💀✨ 项目地址: https://gitcode.com/GitHub_Trending/fr/freemocap 在虚拟现实、游戏动画和运动科学领域,专业动作…...