Skip to content
js
/*
 * @lc app=leetcode.cn id=84 lang=javascript
 *
 * [84] 柱状图中最大的矩形
 */

// @lc code=start
/**
 * @param {number[]} heights
 * @return {number}
 */
var largestRectangleArea = function (heights) {
  let maxArea = 0;
  const stack = [];
  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的索引
        // 计算出栈的bar形成的长方形面积
      const currentArea = heights[stackTopIndex] * (i - stack[stack.length - 1] - 1) 
      maxArea = Math.max(// 计算面积,并挑战最大面积
        maxArea,
        currentArea
      );
    }
     // 当前bar比栈顶bar高了,入栈
    stack.push(i)
  }
  return maxArea
};
// @lc code=end


// 基本思维跟接雨水有点类似,先分组,让他始终递增,在递增里面,最大面积 = 当前高 * 当前宽

// 比较求出最大

largestRectangleArea([2,1,5,6,2,3])

上次更新于: