Menu
CoddyTech

Largest Rectangle in Histogram

むずかしい単調スタックpython iconjava iconcpp iconc iconjs icon+10

ヒストグラムは、隙間なく横に並んだ幅 1 単位の棒の列です。heights[i]は棒iの高さです。ヒストグラム内の長方形は、隣り合う棒の連続した範囲を覆い、その高さはその範囲で最も低い棒の高さを超えることはできません。

このような長方形が取りうる最大の面積を返してください。

関数

largestRectangleArea(heights: integer-array) → integer
heightsinteger-array
左から右に向かって、各バーの高さ
戻り値integer
ヒストグラムに収まる最大の長方形の面積

制約

  • 1 ≤ heights.length ≤ 2 × 104
  • 0 ≤ heights[i] ≤ 105
  • 各バーの幅は1単位なので、バー i から j までの長方形の幅は j-i+1 単位です。

例

入力
heights = [2, 5, 6, 3, 4, 1]
出力
12
説明
4本の棒5、6、3、4はすべて高さが少なくとも3あるため、高さ3の長方形がこれらすべてにまたがります。3 × 4 = 12。最も高い2本の棒である5と6では、5 × 2 = 10にしかなりません。

lock icon提出時に隠しテスト+17件

challenge icon

発展問題

各棒の幅がそれぞれ異なり、その幅が2つ目の配列で与えられるとします。1回の走査で解くスタック解法では、何が変わるでしょうか?

コードをリセット
def largestRectangleArea(heights):
    # ここにコードを書いてください
テストケース

ケース1

ケース2

ケース3

入力

heights = [2, 5, 6, 3, 4, 1]

期待値

12