Menu
CoddyTech

Trapping Rain Water

Uma fileira de barras fica lado a lado, cada uma com uma unidade de largura: height[i] é a altura da barra i. A chuva se acumula nas depressões entre as barras. A água fica acima de uma barra somente se houver uma barra mais alta em algum ponto à sua esquerda e outra em algum ponto à sua direita; além da primeira e da última barra, ela escorre. Retorne o total de unidades de água que a fileira retém.

Função

trap(height: integer-array) → integer
heightinteger-array
a altura de cada barra, da esquerda para a direita
Retornainteger
a quantidade total de unidades de água retida

Restrições

  • 1 ≤ height.length ≤ 2 × 104
  • 0 ≤ height[i] ≤ 105
  • Cada barra tem uma unidade de largura, e a água não fica além da primeira nem da última barra.

Exemplos

Entrada
height = [0, 3, 1, 0, 2, 5, 1, 2]
Saída
7
Explicação
Entre o 3 e o 5, o nível é 3: 2 unidades acima do 1, 3 acima do 0, 1 acima do 2. O 1 seguinte fica entre o 5 e um 2, então vale 1. Isso dá 7.
challenge icon

Para ir além

Suponha que as barras formem uma grade 2D de alturas e que a água possa escapar em todas as quatro direções. Como você contaria a água retida nesse caso?

Redefinir código
def trap(height):
    # Escreva o código aqui

Teste #1

Teste #2

Teste #3

Argumento

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

Saída Esperada

7