84. 柱状图中最大的矩形

68 阅读1分钟

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

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

示例 1:

image.png

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

示例 2:

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

提示:

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

链接:leetcode.cn/problems/la…

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