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. Chove sobre a fileira, e a água se acumula nas depressões entre as barras. A água só fica acima de uma barra 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 número total de quadrados unitários de água que a fileira comporta.

Função

trap(height: integer-array) → integer
heightinteger-array
a altura de cada barra, da esquerda para a direita
Retornainteger
o 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, a água sobe até o nível 3: ela retém 2 unidades sobre a barra de 1, 3 sobre a de 0 e 1 sobre a de 2. O 1 perto do final fica entre o 5 e um 2, então seu nível é 2 e ele retém 1 unidade. 2 + 3 + 1 + 1 = 7.

lock icon+17 testes ocultos ao enviar

challenge icon

Para ir além

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

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

Caso 1

Caso 2

Caso 3

Entrada

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

Esperado

7