Adloun

programmation Java (école d'ingénieur) · Chapitre 5 · Exercice de TD

Supprimer les doublons

Tableaux · niveau 2

Énoncé

Écrire static int[] sansDoublons(int[] t) qui reçoit un tableau trié et retourne un nouveau tableau contenant chaque valeur une seule fois : {1, 1, 2, 3, 3, 3, 7} donne {1, 2, 3, 7}. Pourquoi l'hypothèse « trié » simplifie-t-elle le problème ? Comment obtenir un tableau de la bonne longueur ?

Corrigé

Dans un tableau trié, les valeurs égales sont voisines : une valeur est nouvelle si et seulement si elle diffère de la précédente. On la recopie alors dans un tableau de travail, de même longueur que t, puis on retourne une copie de la bonne longueur.


static int[] sansDoublons(int[] t) {             // t trié
    if (t.length == 0) return t;
    int[] r = new int[t.length];
    int k = 0;                                   // nombre de valeurs déjà gardées
    r[k++] = t[0];
    for (int i = 1; i < t.length; i++) {
        if (t[i] != t[i - 1]) r[k++] = t[i];
    }
    return Arrays.copyOf(r, k);
}

Résultat : [1, 2, 3, 7]. Sans l'hypothèse « trié », il faudrait, pour chaque valeur, la chercher parmi celles déjà gardées : un travail de l'ordre de au lieu de .

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours, le premier QCM et 2 minutes de podcast et de vidéo. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →