Menu
CoddyTech

Trapping Rain Water

Una fila de barras se encuentra una al lado de la otra, cada una con una unidad de ancho: height[i] es la altura de la barra i. La lluvia cae sobre la fila y se acumula en los huecos entre las barras. El agua permanece sobre una barra solo si hay una barra más alta en algún lugar a su izquierda y otra en algún lugar a su derecha; más allá de la primera y la última barra, se escurre.

Devuelve el número total de cuadrados unitarios de agua que contiene la fila.

Función

trap(height: integer-array) → integer
heightinteger-array
la altura de cada barra, de izquierda a derecha
Devuelveinteger
las unidades totales de agua atrapada

Restricciones

  • 1 ≤ height.length ≤ 2 × 104
  • 0 ≤ height[i] ≤ 105
  • Cada barra tiene una unidad de ancho, y el agua no permanece más allá de la primera ni de la última barra.

Ejemplos

Entrada
height = [0, 3, 1, 0, 2, 5, 1, 2]
Salida
7
Explicación
Entre el 3 y el 5, el agua sube hasta el nivel 3: contiene 2 unidades sobre la barra de 1, 3 sobre la de 0 y 1 sobre la de 2. El 1 cerca del final se encuentra entre el 5 y un 2, así que su nivel es 2 y contiene 1 unidad. 2 + 3 + 1 + 1 = 7.

lock icon+17 pruebas ocultas al enviar

challenge icon

Para ir más allá

Supón que las barras forman una cuadrícula 2D de alturas y el agua puede escapar en las cuatro direcciones. ¿Cómo contarías entonces el agua atrapada?

Restablecer código
def trap(height):
    # Escribe el código aquí
Casos de prueba

Caso 1

Caso 2

Caso 3

Entrada

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

Esperado

7