Heim > Java > javaLernprogramm > Wie kann ich Duplikate effizient aus einem Array entfernen, ohne einen Satz zu verwenden?

Wie kann ich Duplikate effizient aus einem Array entfernen, ohne einen Satz zu verwenden?

DDD
Freigeben: 2024-12-19 02:16:09
Original
308 Leute haben es durchsucht

How Can I Efficiently Remove Duplicates from an Array Without Using a Set?

Effizientes Entfernen von Duplikaten aus einem Array, ohne auf Set zurückgreifen zu müssen

Sie haben versucht, eine maßgeschneiderte Lösung zum Entfernen doppelter Elemente aus einem Array zu erstellen. Es sind jedoch Leistungsengpässe aufgetreten. Um diese Implementierung zu optimieren, analysieren wir die Mängel Ihres Ansatzes und schlagen alternative Strategien vor.

Analyse Ihres Algorithmus

Ihr Algorithmus versucht, durch Vergleich nach Duplikaten zu suchen Element mit jedem nachfolgenden Element. Dieser umfassende Vergleich führt zu einer Zeitkomplexität von O(n^2). Bei großen Arrays kann diese Strategie äußerst ineffizient werden.

Optimierter Ansatz

Um die Leistung deutlich zu verbessern, können wir die folgende Optimierung in Betracht ziehen:

  1. Verwenden einer Hash-Map: Implementieren Sie eine Hash-Map, um die eindeutigen Elemente zu speichern, die während der Iteration gefunden werden. Überprüfen Sie beim Hinzufügen jedes Elements zum Array, ob es bereits als Schlüssel in der Hash-Map vorhanden ist. Wenn nicht, fügen Sie es hinzu. Dieser Ansatz ermöglicht effiziente zeitkonstante Suchvorgänge und reduziert die zeitliche Komplexität auf O(n).
  2. Sortieren vor dem Filtern: Sortieren Sie das Array in aufsteigender Reihenfolge. Jetzt liegen die doppelten Elemente nebeneinander. Durchlaufen Sie das sortierte Array und eliminieren Sie benachbarte Duplikate, was zu einem linearen O(n)-Algorithmus führt.

Alternative Lösungen

Während die oben genannten Optimierungen dies können Um die Leistung Ihres Algorithmus zu verbessern, können Sie auch andere etablierte Techniken in Betracht ziehen:

  • Set Sammlungen: Da Sie die Verwendung von Set vermeiden müssen, gehen wir nicht näher auf diese Option ein.
  • Verwenden einer sortierten Sammlung: Nutzen Sie ähnlich wie beim Sortieren vor dem Filtern eine sortierte Sammlung wie TreeSet oder NavigableSet. Es behält automatisch eine sortierte Reihenfolge bei und ermöglicht eine effiziente Elementabfrage, was zu einer O(n log n)-Komplexität führt.

Implementierung

Basierend auf dem optimierten Ansatz, Eine modifizierte Version Ihres Algorithmus, der eine Hash-Map verwendet, könnte sein:

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

    HashMap<Integer, Boolean> map = new HashMap<>();
    int end = arr.length;

    for (int i = 0; i < end; i++) {
        if (map.containsKey(arr[i])) {
            int shiftLeft = i;
            for (int k = i + 1; k < end; k++, shiftLeft++) {
                arr[shiftLeft] = arr[k];
            }
            end--;
            i--;
        } else {
            map.put(arr[i], true);
        }
    }

    int[] whitelist = new int[end];
    for (int i = 0; i < end; i++) {
        whitelist[i] = arr[i];
    }
    return whitelist;
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich Duplikate effizient aus einem Array entfernen, ohne einen Satz zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage