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. Na rząd pada deszcz, a woda 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 stoi wyższy słupek; za pierwszym i ostatnim słupkiem spływa.

Zwróć łączną liczbę jednostkowych kwadratów wody, które zatrzymują się w tym rzędzie.

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ę poza pierwszym ani 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 wody wzrasta do 3: zatrzymują ją 2 jednostki nad słupkiem o wysokości 1, 3 nad słupkiem o wysokości 0 i 1 nad słupkiem o wysokości 2. 1 pod koniec znajduje się między 5 a 2, więc poziom wody wynosi 2 i zatrzymuje się 1 jednostka. 2 + 3 + 1 + 1 = 7.

lock icon+17 ukrytych testów przy wysłaniu

challenge icon

Pytanie dodatkowe

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

Zresetuj kod
def trap(height):
    # Wpisz kod tutaj
Przypadki testowe

Przypadek 1

Przypadek 2

Przypadek 3

Wejście

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

Oczekiwane

7