Collecter l'eau de pluie entre les tours
Etant donné un tableau où chaque élément représente la hauteur d'une tour, s'il commence à pleuvoir, quelle est la quantité d'eau pouvant être collectée entre les tours?
On suppose que la largeur de chaque tour est 1
Exemple :T=[1, 5, 2, 3, 1, 7, 2, 4]

La réponse est : 11
Procedure :
- pour chaque tour, nous essayons de déterminer s'il y a une unité d'eau de pluie au-dessus, si oui, quelle en est la quantité?
- continue d'ajouter la quantité d'eau de pluie fournie par chaque tour pour obtenir le total pour l'ensemble de tours donné
Pour une tour, comment pouvons-nous savoir s'il y a une unité d'eau de pluie dessus :
Pour que l'eau de pluie soit sur une tour, la hauteur de la tour doit être inférieure à celle d'une des tours voisines.
Exemple Tour 2
Exemple Tour 2
Quelle est la quantité maximale d'eau de pluie au-dessus de la tour actuelle :
tout d'abord en regardant à gauche de la tour actuelle et en recherchant la hauteur maximale(maxleft), puis en regardant à droite et en recherchant la hauteur maximale(maxright), et prenez
min(maxleft, maxright) - hauteur de la tour actuelle
- Créer deux tableaux de la même taille que le tableau original, maxgauche, maxdroite
- maxgauche[i] signifie la hauteur maximale sur le côté gauche de la tour tours[i], de même pour maxdroite[i]
- Calculer pour chaque tour rainwater =min(maxgauche[i],maxdroite[i])-tours[i]
def collecter(tab):
n=len(tab)
maxgauche = [0]*n
maxdroite = [0]*n
quantite = 0
maxgauche[0] = tab[0]
for i in range( 1, n):
maxgauche[i] = max(maxgauche[i-1], tab[i])
maxdroite[n-1] = tab[n-1]
for i in range(n-2, -1, -1):
maxdroite[i] = max(maxdroite[i+1], tab[i]);
for i in range(n):
quantite += min(maxgauche[i],maxdroite[i]) - tab[i]
return quantite
Partager ce cours avec tes amis :
Rédigé par
ESSADDOUKI
Mostafa
The education of the 21st century opens up opportunities to not merely teach, but to coach, mentor, nurture and inspire.
