【柱状图中最大的矩形】单调栈
计算矩形面积需要三要素,高,左端点和右端点。
高的枚举可以直接枚举每个柱子的高度,那以每个柱子为高,矩形的左右端点如何确定?
单调栈维护柱子索引,保证柱子索引递增以及栈中索引对应的柱子高度也是递增的
那么柱子左端点显而易见就是栈中前一个元素,柱子的右端点则是该柱子被弹栈时即将要插入的柱子
注意:
- 柱子遍历完毕后栈中剩余元素的处理
- 第一个柱子的左端点:无穷高的虚拟柱子(索引为-1)
点击查看代码
class Solution { public int largestRectangleArea(int[] heights) { Stack<Integer> stack = new Stack<>(); int i = 0; int l, r, h; int ans = 0; while(i <= heights.length) { r = i; while(!stack.empty() && (r == heights.length || heights[stack.peek()] >= heights[i])) { h = heights[stack.pop()]; l = stack.empty() ? -1 : stack.peek(); ans = Math.max((r - l - 1) * h, ans); } stack.push(i ++ ); } return ans; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效