给定非负整数数组 heights ,数组中的数字用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 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) {
const stack = [-1]
let area = 0
for (let i = 0; i < heights.length; i++) {
// 单调递增 当栈顶大于等于当前值时 进入循环
while (stack[stack.length - 1] != -1 && heights[stack[stack.length - 1]] >= heights[i]) {
// 获取高度
let h = heights[stack.pop()]
// 获取宽度
let w = i - stack[stack.length - 1] - 1
area = Math.max(area, h * w)
}
stack.push(i)
}
// 当递增栈内还有值时 => 计算尾部
while (stack[stack.length - 1] != -1) {
// 获取高度
let h = heights[stack.pop()]
// 获取宽度 => 由于时最后一个值 宽度用总长度去减
let w = heights.length - stack[stack.length - 1] - 1
area = Math.max(area, h * w)
}
return area
};
来源:力扣(LeetCode)
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。