目录
- 题目
- 单调题解:递增栈
题目
- 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。
单调题解:递增栈
- 左边补0:让heights 数组的索引 0 入栈;右边补0:栈中的 bar 都比它高,能一一出栈。
const largestRectangleArea = (heights) => {let maxArea = 0const 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
}
参考博客