Adloun

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))      # None

Les 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.