栈相关问题-使用单调栈解决柱形图中面接最大的矩形

117 阅读1分钟

柱状图中最大的矩形【leetcode-84】

题目描述

给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。

求在该柱状图中,能够勾勒出来的矩形的最大面积。

解题思路

参考leetcode 解题思路视频,使用单调栈,讲解的很清楚

运行效率

O{B]2Z_9Z3A)_8FM3_YEA.png

代码如下

function largestRectangleArea(heights: number[]): number {
  const stack = [];
  let res = 0;
  let i = 0;
  for (; i < heights.length; i++) {
    if (stack.length) {
      while (heights[stack[stack.length - 1]] > heights[i]) {
        popAndGetMax();
      }
    }
    stack.push(i);
  }
  while (stack.length) {
    popAndGetMax();
  }
  return res;

  function popAndGetMax() {
    const j = stack.pop();
    const tmax =
      heights[j] * (i - (stack.length ? stack[stack.length - 1] + 1 : 0));
    res = res > tmax ? res : tmax;
  }
}