Adloun

Le maximum et son indice, les égalités en prime

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

Énoncé

Écrire indices_du_maximum(t) qui renvoie la liste de tous les indices où le maximum de la liste t est atteint, en un seul parcours de complexité .

Corrigé

On met à jour le maximum courant. Si une valeur strictement plus grande est trouvée, on vide la liste des indices pour n'y mettre que la nouvelle position. Si une valeur égale est trouvée, on ajoute l'indice à la liste :

def indices_du_maximum(t: list) -> list:
    """Précondition : t est non vide."""
    m = t[0]
    pos = [0]
    for i in range(1, len(t)):
        # Invariant : m = max(t[0..i-1]) et pos est la liste des indices j < i tels que t[j] == m
        if t[i] > m:
            m = t[i]
            pos = [i]  # On réinitialise car l'ancien maximum est dépassé
        elif t[i] == m:
            pos.append(i)
    return pos

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.