Problème — Deux nombres de somme donnée
Application directe du cours · niveau 3 (difficile) · NSI (terminale), chapitre 2 — Dictionnaires et tables de hachage
É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)) # NoneLes autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.