Eine Alternative zu dem HashSet Ansatz wäre:
Sortieren der Eingangsanordnung
Zählen Sie die Zahl o f nicht-doppelte Werte in der sortierten Array
Ordnen der Ausgang Array
Iterieren über die sortierten Array, das Kopieren der nicht-doppelte Werte zu.
HashSet Der Ansatz ist O(N)
im Durchschnitt unter der Annahme, daß 1) man die HashSet mit der richtigen Größe vorzuzubelegen und 2) der (nicht duplicate) Werte in dem Eingangsfeld hash etwa gleichmäßig. (Aber wenn der Wert Hashing ist pathologisch, der schlimmste Fall ist O(N**2)
!)
Der Sortieransatz ist O(NlogN)
im Durchschnitt.
Der HashSet-Ansatz benötigt durchschnittlich mehr Speicher.
Wenn Sie dies selten OR für wirklich große "gut erzogene" Eingabe-Arrays tun, ist der HashSet-Ansatz wahrscheinlich besser. Sonst könnte es ein Toss-Up sein, welcher Ansatz besser ist.
Verwenden Sie modifizierten Mergesort, Entfernen von Duplikaten w gefunden, anstatt beide Kopien zur Liste hinzuzufügen. Läuft in ** 'O (N * logN)' ** –