Menu
CoddyTech

Trapping Rain Water

Una fila di barre è affiancata, ciascuna larga un’unità: height[i] è l’altezza della barra i. La pioggia cade sulla fila e si raccoglie negli avvallamenti tra le barre. L’acqua resta sopra una barra solo se a sinistra e a destra si trova una barra più alta; oltre la prima e l’ultima barra scorre via.

Restituisci il numero totale di quadrati unitari d’acqua contenuti nella fila.

Funzione

trap(height: integer-array) → integer
heightinteger-array
l’altezza di ciascuna barra, da sinistra a destra
Restituisceinteger
le unità totali di acqua intrappolata

Vincoli

  • 1 ≤ height.length ≤ 2 × 104
  • 0 ≤ height[i] ≤ 105
  • Ogni barra è larga un'unità e l'acqua non rimane oltre la prima o l'ultima barra.

Esempi

Input
height = [0, 3, 1, 0, 2, 5, 1, 2]
Output
7
Spiegazione
Tra il 3 e il 5 l’acqua sale fino al livello 3: contiene 2 unità sopra la barra di 1, 3 sopra lo 0 e 1 sopra il 2. L’1 vicino alla fine si trova tra il 5 e un 2, quindi il suo livello è 2 e contiene 1 unità. 2 + 3 + 1 + 1 = 7.

lock icon+17 test nascosti all’invio

challenge icon

Per approfondire

Supponiamo che le barre formino una griglia 2D di altezze e che l’acqua possa fuoriuscire in tutte e quattro le direzioni. Come conteresti l’acqua intrappolata in questo caso?

Ripristina il codice
def trap(height):
    # Scrivi il codice qui
Casi di test

Caso 1

Caso 2

Caso 3

Input

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

Atteso

7