题目
- 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。
![]()
单调题解:递增栈
- 左边补0:让heights 数组的索引 0 入栈;右边补0:栈中的 bar 都比它高,能一一出栈。
const largestRectangleArea = (heights) => {
let maxArea = 0
const stack = []//单调递增栈,存heights的索引
heights = [0, ...heights, 0]
for (let i = 0; i < heights.length; i++) {
while (heights[i] < heights[stack[stack.length - 1]]) { // 当前bar比栈顶bar矮
const stackTopIndex = stack.pop() // 栈顶元素出栈,并保存栈顶bar的索引
maxArea = Math.max( // 计算面积,并挑战最大面积
maxArea, // 计算出栈的bar形成的长方形面积
heights[stackTopIndex] * (i - stack[stack.length - 1] - 1)
)
}
stack.push(i) // 当前bar比栈顶bar高了,入栈
}
return maxArea
}
参考博客