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の間にあるので、1を保持します。これで7になります。
challenge icon

発展問題

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

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

テスト #1

テスト #2

テスト #3

引数

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

期待される出力

7