Adloun

Deux sommes pour une cible

Exercice · informatique (tronc commun des prépas scientifiques), chapitre 2 — Recherche séquentielle et dictionnaires

Énoncé

Écrire une fonction deux_sommes(t, cible) déterminant s'il existe deux indices distincts tels que t[i] + t[j] == cible, avec une complexité temporelle de .

Corrigé

Pour chaque élément du tableau, son complémentaire recherché est . On conserve l'historique des valeurs déjà rencontrées dans un dictionnaire :

def deux_sommes(t: list, cible: float) -> bool:
    vus = {}
    for x in t:
        # Invariant : vus contient exactement les valeurs de t[0..i-1] rencontrées
        partenaire = cible - x
        if partenaire in vus:
            return True
        vus[x] = True
    return False

Chaque itération effectue une recherche et une insertion en dans le dictionnaire vus. La complexité totale est donc linéaire .

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.