Menu
CoddyTech

Trapping Rain Water

Rząd słupków stoi obok siebie, każdy o szerokości jednej jednostki: height[i] to wysokość słupka i. Woda deszczowa gromadzi się w zagłębieniach między słupkami. Woda utrzymuje się nad słupkiem tylko wtedy, gdy gdzieś po jego lewej i prawej stronie znajduje się wyższy słupek; za pierwszym i ostatnim słupkiem spływa. Zwróć łączną liczbę jednostek wody, którą zatrzymuje rząd.

Funkcja

trap(height: integer-array) → integer
heightinteger-array
wysokość każdego słupka, od lewej do prawej
Zwracainteger
łączna liczba jednostek uwięzionej wody

Ograniczenia

  • 1 ≤ height.length ≤ 2 × 104
  • 0 ≤ height[i] ≤ 105
  • Każdy słupek ma szerokość jednej jednostki, a woda nie utrzymuje się za pierwszym ani za ostatnim słupkiem.

Przykłady

Wejście
height = [0, 3, 1, 0, 2, 5, 1, 2]
Wyjście
7
Wyjaśnienie
Między 3 a 5 poziom wynosi 3: 2 jednostki ponad 1, 3 ponad 0, 1 ponad 2. Późniejsze 1 znajduje się między 5 a 2, więc zachowuje wartość 1. To daje 7.
challenge icon

Pytanie dodatkowe

Załóżmy, że słupki tworzą dwuwymiarową siatkę wysokości, a woda może uciekać we wszystkich czterech kierunkach. Jak policzyć wtedy uwięzioną wodę?

Zresetuj kod
def trap(height):
    # Napisz kod tutaj

Test #1

Test #2

Test #3

Argument

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

Oczekiwany wynik

7