LeetCode 84 柱状图中最大的矩形

给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。

以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。

图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。

示例:

输入: [2,1,5,6,2,3]
输出: 10

1. 万物皆可暴力 (2333,没想到 javascript 暴力下来,性能还阔以啊

/**
 * @param {number[]} heights
 * @return {number}
 */
var largestRectangleArea = function (heights) {
  let len = heights.length;
  // 特判
  if (len === 0) return 0;
  let res = 0;
  for (let i = 0; i < len; i++) {
    // 找左边最后 1 个大于等于 heights[i] 的下标
    let left = i;
    let curHeight = heights[i];
    while (left > 0 && heights[left - 1] >= curHeight) {
      left--;
    }
    // 找右边最后 1 个大于等于 heights[i] 的索引
    let right = i;
    while (right < heights.length - 1 && heights[right + 1] >= curHeight) {
      right++;
    }
    let width = right - left + 1;
    res = Math.max(res, width * curHeight);
  }
  return res;
};

猜你喜欢

转载自www.cnblogs.com/ssaylo/p/13395514.html
今日推荐