给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。
求在该柱状图中,能够勾勒出来的矩形的最大面积。
示例 1:
输入: heights = [2,1,5,6,2,3]
输出: 10
解释: 最大的矩形为图中红色区域,面积为 10
示例 2:
输入: heights = [2,4]
输出: 4
提示:
1 <= heights.length <=1050 <= heights[i] <= 104
题解:
/**
* @param {number[]} heights
* @return {number}
*/
// 单调栈
var largestRectangleArea = function (heights) {
let max = 0;
const stack = [];
// 防止第一位以及最后一位不计算
heights = [0, ...heights, 0]
for (let i = 0; i < heights.length; i++) {
// 维护单调递增栈
while (stack.length && heights[i] < heights[stack[stack.length - 1]]) {
// 当前值小于栈顶时(递减时)栈顶出栈
let curIndex = stack.pop()
// 计算宽度 可以理解为包含最小值的连续
let curWidth = i - stack[stack.length - 1] -1
// 获取最大值
max = Math.max(max, heights[curIndex] * curWidth)
}
stack.push(i)
}
return max
};
来源:力扣(LeetCode)
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。