柱状图中最大的矩形【leetcode-84】
题目描述
给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。
求在该柱状图中,能够勾勒出来的矩形的最大面积。
解题思路
参考leetcode 解题思路视频,使用单调栈,讲解的很清楚
运行效率
代码如下
function largestRectangleArea(heights: number[]): number {
const stack = [];
let res = 0;
let i = 0;
for (; i < heights.length; i++) {
if (stack.length) {
while (heights[stack[stack.length - 1]] > heights[i]) {
popAndGetMax();
}
}
stack.push(i);
}
while (stack.length) {
popAndGetMax();
}
return res;
function popAndGetMax() {
const j = stack.pop();
const tmax =
heights[j] * (i - (stack.length ? stack[stack.length - 1] + 1 : 0));
res = res > tmax ? res : tmax;
}
}