84. 柱状图中最大的矩形(难)

题目

  • 给定 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
}

参考博客

posted @ 2025-03-13 10:08  Frommoon  阅读(7)  评论(0)    收藏  举报