剑指 Offer II 039. 直方图最大矩形面积

69 阅读1分钟

给定非负整数数组 heights ,数组中的数字用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。

求在该柱状图中,能够勾勒出来的矩形的最大面积。

示例 1:

image.png

输入: heights = [2,1,5,6,2,3]
输出: 10
解释: 最大的矩形为图中红色区域,面积为 10

示例 2:

image.png

输入: heights = [2,4]
输出: 4

提示:

  • 1 <= heights.length <=105
  • 0 <= 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)

链接:leetcode.cn/problems/0y…

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。