Menu
CoddyTech

Trapping Rain Water

Une rangée de barres se tient côte à côte, chacune ayant une largeur d’une unité : height[i] correspond à la hauteur de la barre i. La pluie tombe sur la rangée et s’accumule dans les creux entre les barres. L’eau reste au-dessus d’une barre uniquement si une barre plus haute se trouve quelque part à sa gauche et quelque part à sa droite ; au-delà de la première et de la dernière barre, elle s’écoule.

Renvoie le nombre total de carrés unitaires d’eau que la rangée retient.

Fonction

trap(height: integer-array) → integer
heightinteger-array
la hauteur de chaque barre, de gauche à droite
Renvoieinteger
le nombre total d’unités d’eau piégées

Contraintes

  • 1 ≤ height.length ≤ 2 × 104
  • 0 ≤ height[i] ≤ 105
  • Chaque barre mesure une unité de largeur, et l’eau ne reste pas au-delà de la première ni de la dernière barre.

Exemples

Entrée
height = [0, 3, 1, 0, 2, 5, 1, 2]
Sortie
7
Explication
Entre le 3 et le 5, l’eau monte jusqu’au niveau 3 : elle contient 2 unités au-dessus de la barre de 1, 3 au-dessus de celle de 0 et 1 au-dessus de celle de 2. Le 1 près de la fin se trouve entre le 5 et un 2, son niveau est donc 2 et il contient 1 unité. 2 + 3 + 1 + 1 = 7.

lock icon+17 tests cachés à la soumission

challenge icon

Pour aller plus loin

Supposons que les barres forment une grille 2D de hauteurs et que l’eau puisse s’échapper dans les quatre directions. Comment compteriez-vous alors l’eau piégée ?

Réinitialiser le code
def trap(height):
    # Écrivez le code ici
Cas de test

Cas 1

Cas 2

Cas 3

Entrée

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

Attendu

7