一、题目描述:
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 春招闯关活动」, 点击查看 活动详情