Menu
CoddyTech

Trapping Rain Water

Una fila di barre è affiancata, ciascuna larga un’unità: height[i] è l’altezza della barra i. La pioggia si raccoglie negli avvallamenti tra le barre. L’acqua rimane sopra una barra solo se da qualche parte alla sua sinistra e alla sua destra c’è una barra più alta; oltre la prima e l’ultima barra, l’acqua defluisce. Restituisci il numero totale di unità d’acqua trattenute dalla fila.

Funzione

trap(height: integer-array) → integer
heightinteger-array
l'altezza di ogni 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 il livello è 3: 2 unità sopra l’1, 3 sopra lo 0, 1 sopra il 2. L’1 successivo si trova tra il 5 e un 2, quindi vale 1. Il totale è 7.
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

Test #1

Test #2

Test #3

Argomento

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

Output atteso

7