📜  使用 JavaScript 的直方图下的最大矩形区域 |不使用堆栈

📅  最后修改于: 2022-05-13 01:56:08.208000             🧑  作者: Mango

使用 JavaScript 的直方图下的最大矩形区域 |不使用堆栈

在给定的直方图中找到可能的最大矩形区域,其中最大的矩形可以由许多连续的条组成。为简单起见,假设所有条具有相同的宽度并且宽度为 1 个单位。

例如,考虑以下具有 7 个高度的柱状图 {6, 2, 5, 4, 5, 1, 6}。可能的最大矩形是 12(见下图,最大面积矩形以红色突出显示)

方法:

  • 对于每个条形“x”,我们计算以“x”为矩形中最小条形的面积。我们将在“x”左侧找到第一个较小(小于“x”)柱的索引,在“x”右侧找到第一个较小柱的索引。让我们将这些索引分别称为“左索引”和“右索引”。
  • 将“x”乘以“right_index-left_index-1”并将其存储在区域中
  • 返回最大面积

下面是上述方法的实现。

index.js


输出:

12

复杂度:我们使用线性搜索来寻找最小值,那么这个算法的最坏情况时间复杂度变为 O(n^2)。