给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。
以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。
图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。
示例:
输入: [2,1,5,6,2,3]
输出: 10
1. 万物皆可暴力 (2333,没想到 javascript 暴力下来,性能还阔以啊
/**
* @param {number[]} heights
* @return {number}
*/
var largestRectangleArea = function (heights) {
let len = heights.length;
// 特判
if (len === 0) return 0;
let res = 0;
for (let i = 0; i < len; i++) {
// 找左边最后 1 个大于等于 heights[i] 的下标
let left = i;
let curHeight = heights[i];
while (left > 0 && heights[left - 1] >= curHeight) {
left--;
}
// 找右边最后 1 个大于等于 heights[i] 的索引
let right = i;
while (right < heights.length - 1 && heights[right + 1] >= curHeight) {
right++;
}
let width = right - left + 1;
res = Math.max(res, width * curHeight);
}
return res;
};