[leetcode] 84. 柱状图中最大的矩形
用到了单调栈的知识,还是第一次碰到。学习了好久
简单来说,维护一个单调栈,如果当前元素大于栈顶元素,则把当前元素的坐标入栈,否则,弹出栈顶元素直到当前元素可入栈。
在栈顶元素弹出时,把弹出的元素当成最短木板,计算能组成的最大面积是多少。根据单调栈的性质:max = Math.max(max, heights[tmp] * (stack.empty() ? i : i - stack.peek() - 1));
组成矩阵的高度为当前弹出的栈顶元素:heights[tmp],而宽度则为(stack.empty() ? i : i - stack.peek() - 1)
class Solution {
public int largestRectangleArea(int[] heights) {
if (heights.length == 0) return 0;
Stack<Integer> stack = new Stack<>();
int max = 0;
for (int i = 0; i < heights.length; i++) {
while (!stack.isEmpty() && heights[stack.peek()] >= heights[i]) {
int tmp = stack.pop();
// 把当前的tmp木板作为最短木板,看能组成的最大面积是多少
max = Math.max(max, heights[tmp] * (stack.empty() ? i : i - stack.peek() - 1));
}
stack.push(i);
}
int tmp = 0;
int len = heights.length;
while (!stack.isEmpty()) {
tmp = stack.pop();
max = Math.max(max, heights[tmp] * (stack.empty() ? len : len - stack.peek() - 1));
}
return max;
}
}
标签:
LeetCode
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· Sdcb Chats 技术博客:数据库 ID 选型的曲折之路 - 从 Guid 到自增 ID,再到
· Winform-耗时操作导致界面渲染滞后
· Phi小模型开发教程:C#使用本地模型Phi视觉模型分析图像,实现图片分类、搜索等功能
· 语音处理 开源项目 EchoSharp
· drools 规则引擎和 solon-flow 哪个好?solon-flow 简明教程
2014-07-30 UVa225,Golygons