Menu
CoddyTech

Trapping Rain Water

幅1単位の棒が横一列に並んでいます。height[i]は棒iの高さです。列の上に雨が降り、棒の間のくぼみに水がたまります。棒の上に水がとどまるのは、その棒より高い棒が左側と右側の両方にある場合だけです。最初の棒より左や最後の棒より右では、水は流れ落ちます。

列にたまる水の単位正方形の合計数を返してください。

関数

trap(height: integer-array) → integer
heightinteger-array
各バーの高さ(左から右へ)
戻り値integer
閉じ込められた水の総単位数

制約

  • 1 ≤ height.length ≤ 2 × 104
  • 0 ≤ height[i] ≤ 105
  • 各バーの幅は1単位で、水は最初または最後のバーを越えてたまりません。

例

入力
height = [0, 3, 1, 0, 2, 5, 1, 2]
出力
7
説明
3と5の間では、水位は3まで上がります。1の棒の上に2単位、0の上に3単位、2の上に1単位の水がたまります。終わり近くにある1は5と2の間にあるので、水位は2で、1単位の水がたまります。2 + 3 + 1 + 1 = 7。

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

challenge icon

発展問題

棒が高さを表す2Dグリッドを形成し、水が4方向すべてに流れ出る可能性があるとします。その場合、たまった水の量をどのように数えますか?

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

ケース1

ケース2

ケース3

入力

height = [0, 3, 1, 0, 2, 5, 1, 2]

期待値

7