Adloun

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

100 % gratuit

Essaie le suivant avec le tuteur

Faire l'exercice suivant avec le tuteur

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.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant avec le tuteur →