[LeetCode 84. 柱状图中最大的矩形] | 刷题打卡

77 阅读1分钟

一、题目描述:

leetcode-cn.com/problems/mi… 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。

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

****示例 1:

输入: [2,1,5,6,2,3]
输出: 10

二、思路分析:

  • 单调栈
  • 构建单调递增的单调栈
    • 退栈的时候计算以栈顶元素为高,栈顶元素的前一个元素为左边界,当前遍历元素的前一个元素为右边界构成的矩形的面积

三、AC 代码:

/**
 * @param {number[]} heights
 * @return {number}
 */
var largestRectangleArea = function(heights) {
    const stack = []
    let maxArea = 0
    heights = [0,...heights,0] // 前面加0防止栈为空,后面加0以便于所有的高都能推栈
    for(let i=0;i<heights.length;i++){
        while( heights[stack[stack.length - 1]] > heights[i]){
            let curr = stack.pop()
             maxArea = Math.max(heights[curr] * ((i-1)-stack[stack.length - 1]),maxArea) // 退栈的时候计算以栈顶元素为高,栈顶元素的前一个元素为左边界,当前遍历元素的前一个元素为右边界构成的矩形的面积
        }
        stack.push(i)
    }


    return maxArea
};

四、总结:

  • 经典单调栈题目,以他为模板可以做其他类型的题,第二次做就算看到代码,也想了很久。

本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情