Façon la plus efficace de supprimer les doublons d'un tableau sans l'aide de Jeu

M'a demandé d'écrire mon propre mise en œuvre pour supprimer les doublons dans un tableau. Voici ce que j'ai créé. Mais après des tests avec 1 000 000 d'éléments qu'il a pris beaucoup de temps pour terminer. Il y a une chose que je peux faire pour améliorer mon algorithme ou un bug à supprimer ?

J'ai besoin d'écrire ma propre mise en œuvre - ne pas utiliser Set, HashSet etc. Ou tout autres outils tels que les itérateurs. Tout simplement un tableau de supprimer les doublons.

public static int[] removeDuplicates(int[] arr) {

    int end = arr.length;

    for (int i = 0; i < end; i++) {
        for (int j = i + 1; j < end; j++) {
            if (arr[i] == arr[j]) {                  
                int shiftLeft = j;
                for (int k = j+1; k < end; k++, shiftLeft++) {
                    arr[shiftLeft] = arr[k];
                }
                end--;
                j--;
            }
        }
    }

    int[] whitelist = new int[end];
    for(int i = 0; i < end; i++){
        whitelist[i] = arr[i];
    }
    return whitelist;
}
  • Quelles sont les restrictions placées sur vous? Pouvez-vous sort? Vous pouvez certainement améliorer cette O(n^3) la mise en œuvre. Cet algorithme doit être O(nln(n)) dans le meilleur des cas.
  • Eh bien oui, vous avez un O(n^3) algorithme... qui ne sonne pas comme une bonne idée pour moi.
  • vous pouvez utiliser Set<Integer> ?
  • Vous avez demandé ce dans Codereview, trop. Il y a réponse, trop.
  • Oui, le tableau peut être trié.
  • On m'a demandé d'écrire mon propre mise en œuvre, de ne pas utiliser d'outils.
  • J'ai demandé, mais il n'y a pas trop d'attention, donc je demande ici.
  • Peut-être jeter un oeil à la réponse. Il va vous aider.
  • Quelle est la portée de la ints dans les tableaux? Si elle est connue et petit, vous pouvez faire un seau de tri et supprimer les doublons que vous allez.
  • des valeurs à l'intérieur de la matrice de n'importe pas vraiment. Mais je peux supposer que la fourchette est entre 0-1000.
  • Eh bien, vous avez déjà deux réponses dans le la revue de code forum
  • double possible de Java Supprimer les Doublons d'un Tableau?
  • Cette question semble être hors-sujet parce que c'est de demander une révision du code. Voir Quels sont les sujets que pouvez-vous nous parler ici dans le Centre d'Aide. Peut-être l'Examen du Code de la Pile d'Échange serait un meilleur endroit pour demander cela.
  • double possible de Comment puis-je supprimer les éléments répétés de ArrayList?
  • Double Possible de Algorithm: moyen efficace pour supprimer les doubles des nombres entiers à partir d'un tableau
  • code peuvent bénéficier de trier le tableau et ensuite utiliser cette information pour modifier le tableau en place et d'obtenir un nouvel indice.

InformationsquelleAutor ashur | 2013-07-31