NSI (terminale) · Chapitre 2 · Application directe du cours
Problème — Deux nombres de somme donnée
Dictionnaires et tables de hachage · niveau 3 (difficile)
Énoncé
Problème — Deux nombres de somme donnée.
On dispose d'une liste d'entiers et d'une valeur cible. Déterminer s'il existe deux éléments dont la somme vaut la cible, et renvoyer leurs indices.
Corrigé
Une approche naïve teste toutes les paires en . En mémorisant dans un dictionnaire les valeurs déjà vues (associées à leur indice), on résout le problème en un seul passage : pour chaque élément , on cherche si le complément a déjà été rencontré. Chaque test coûte en moyenne, d'où un coût total .
def somme_cible(liste, cible):
vus = {} # valeur -> indice
for i, x in enumerate(liste):
complement = cible - x
if complement in vus:
return (vus[complement], i)
vus[x] = i
return None
print(somme_cible([2, 7, 11, 15], 9)) # (0, 1)
print(somme_cible([3, 2, 4], 6)) # (1, 2)
print(somme_cible([1, 2, 3], 100)) # None100 % gratuit
Essaie le suivant avec le tuteur
- L'exercice suivant avec le tuteur, sans compte : il guide pas à pas, sans donner la réponse
- 7 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le podcast et la vidéo du chapitre : 2 minutes d'écoute sans compte
Sans compte : le cours, le premier QCM, 2 minutes de podcast et de vidéo et un exercice avec le tuteur. Pour tout le reste : inscription gratuite en 30 secondes, sans carte bancaire.