新闻详情

新闻详情

首页 / 资讯中心 / 详情

单调栈题解:栈里存的不是元素,是还没等到答案的位置

发布时间:2026/9/9 13:47:07来源:尧图网络
单调栈题解:栈里存的不是元素,是还没等到答案的位置
单调栈题解栈里存的不是元素是还没等到答案的位置单调栈是高频题但很多人背模板背得很痛苦。其实单调栈的核心很简单栈里存的不是普通元素而是“还没等到答案的位置”。每来一个新元素就看看它能不能帮栈顶那些位置结算答案。一旦理解“等待答案”这件事下一更大元素、每日温度、柱状图最大矩形都会清楚很多。一、从每日温度理解题目给定每天温度求每一天还要等几天才有更高温度。我们维护一个温度递减的栈里面存下标。flowchart TD A[遍历当前温度] -- B{当前温度是否大于栈顶} B --|是| C[弹出栈顶并结算等待天数] C -- B B --|否| D[当前下标入栈]栈里的人都在等一个更高温度。当前温度来了能帮谁解答就把谁弹出去。二、代码实现def dailyTemperatures(temperatures): ans [0] * len(temperatures) stack [] for i, t in enumerate(temperatures): while stack and t temperatures[stack[-1]]: j stack.pop() ans[j] i - j stack.append(i) return ans注意栈里存下标不是温度。因为答案需要距离必须知道位置。三、复杂度证明每个下标最多入栈一次、出栈一次所以总操作数是 O(n)。while 看起来嵌套在 for 里但不是 O(n²)。这是单调栈最重要的复杂度证明。入栈次数 n 出栈次数 n 总复杂度 O(n)面试时能把这句话讲清楚比只写模板更重要。四、常见边界递减数组会全部留在栈里答案全 0递增数组会每次弹出前一个相等温度不算更高所以条件是不是。很多错解就错在相等处理。题目问“更高”不是“更高或相等”。再看柱状图最大矩形单调栈里等的就不是“更大元素”而是“右边第一个更小元素”。每个柱子需要知道它能向左右扩展多远。def largestRectangleArea(heights): stack [] ans 0 for i, h in enumerate(heights [0]): while stack and h heights[stack[-1]]: height heights[stack.pop()] left stack[-1] if stack else -1 ans max(ans, height * (i - left - 1)) stack.append(i) return ans这里末尾加 0 是为了把栈里剩余柱子全部结算。这个技巧不是魔法是人为制造一个最小右边界。单调栈题最值得练的是识别“谁在等什么答案”。等更大、等更小、等边界代码形态会变但思想一致。面试表达时可以这样讲我维护一个单调栈栈内元素还没有找到右侧第一个更大值当前元素如果更大就不断弹栈并结算答案。每个元素最多进出栈一次所以 O(n)。这段话比“我用模板”强多了。proof_line: invariant: 栈内下标对应值单调递减 settlement: 当前值为被弹元素的第一个更大值 complexity: 每个下标进栈出栈各一次会写也要会讲。算法题面试讲清不变量很加分。五、总结单调栈里存的是还没等到答案的位置。新元素到来时它负责结算能结算的人。每个元素入栈一次、出栈一次所以复杂度 O(n)。别死背模板。先问谁在等答案谁能帮它结算
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Rocket.Chat 国际化(i18n)工程实践指南:翻译键的存储、命名、插值与自动校验 2026/9/9 13:44:18

Rocket.Chat 国际化(i18n)工程实践指南:翻译键的存储、命名、插值与自动校验

Rocket.Chat 国际化(i18n)工程实践指南:翻译键的存储、命名、插值与自动校验 【免费下载链接】Rocket.Chat The Secure CommsOS™ for mission-critical operations 项目地址: https://gitcode.com/GitHub_Trending/ro/Rocket.Chat Ro…

阅读更多 →
牛客Java刷题21-26:继承、多态、接口与抽象类深度解析 2026/9/9 13:44:18

牛客Java刷题21-26:继承、多态、接口与抽象类深度解析

从“照着敲都会,一运行就报错”到真正理解面向对象,是每个Java零基础学习者必须跨过的一道坎。这个系列的牛客刷题指南走到第21~26题,正好切入Java里最核心也最容易让人绕晕的一组概念:继承、多态、接口和抽象类。这篇文章就把这6…

阅读更多 →
割草机器人RTK天线:决定厘米级定位的最后一厘米 2026/9/9 13:44:18

割草机器人RTK天线:决定厘米级定位的最后一厘米

割草这件事,听起来简单,真正做起来才发现坑全在地图之外。我见过不少割草机器人的DEMO,空地上跑得规规矩矩,一旦贴到墙边、树根、围栏,就开始画蛇型,留下一道道"阴阳头"。绝大多数人第一反应是算…

阅读更多 →
如何手动用 compose 组合 applyMiddleware 与 DevTools enhancer 创建 Redux store 2026/9/9 13:44:18

如何手动用 compose 组合 applyMiddleware 与 DevTools enhancer 创建 Redux store

如何手动用 compose 组合 applyMiddleware 与 DevTools enhancer 创建 Redux store 【免费下载链接】redux A JS library for predictable global state management 项目地址: https://gitcode.com/gh_mirrors/re/redux 当你不使用 Redux Toolkit 的 configureStore&…

阅读更多 →
agents24 仓库 saga-orchestration 技能进阶指南:生产级 Saga 编排器实现、补偿事务链与可观测性治理 2026/9/9 13:44:18

agents24 仓库 saga-orchestration 技能进阶指南:生产级 Saga 编排器实现、补偿事务链与可观测性治理

agents24 仓库 saga-orchestration 技能进阶指南:生产级 Saga 编排器实现、补偿事务链与可观测性治理 【免费下载链接】agents Multi-harness agentic plugin marketplace for Claude Code, Codex, Cursor, OpenCode, GitHub Copilot, and Google Antigravity 项目…

阅读更多 →
Python调用高德地图API:从地理编码到轨迹可视化完整指南 2026/9/9 13:41:18

Python调用高德地图API:从地理编码到轨迹可视化完整指南

简介:基于Python的高德地图调用与数据采集源码,面向地理信息初学者、爬虫开发者以及需要快速搭建地图可视化页面的技术人员。示例以高德地图API为核心,实现坐标定位、地图展示与交互操作,同时结合58租房页面数据进行抓取和清洗&am…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞