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

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

Barbara Streisand
Freigeben: 2024-12-09 13:32:16
Original
879 Leute haben es durchsucht

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

Effizientes Entfernen von Array-Duplikationen ohne Sätze

Bei einigen Programmierherausforderungen müssen Sie möglicherweise duplizierte Werte aus einem Array entfernen, ohne vorgefertigte Werte zu verwenden Datenstrukturen wie Set oder HashSet. Hier ist ein optimierter Ansatz, den Sie in Betracht ziehen können:

Ihre bereitgestellte Implementierung führt mehrere Durchläufe über das Array durch, was zu einer ineffizienten Zeitkomplexität führt. Um es zu verbessern, sollten Sie eine Kombination aus zwei Optimierungen in Betracht ziehen:

1. Verwenden Sie ein Marker-Array:

Erstellen Sie ein Marker-Array mit einer Größe, die dem maximalen Element im ursprünglichen Array entspricht. Initialisieren Sie alle Elemente auf 0. Wenn Sie im ursprünglichen Array auf ein Element stoßen, setzen Sie die entsprechende Position im Marker-Array auf 1. Auf diese Weise müssen Sie nur das Marker-Array überprüfen, um festzustellen, ob ein Element ein Duplikat ist oder nicht.

2. Endindexzeiger verwenden:

Verwalten Sie einen Endindexzeiger, der den Index angibt, bis zu dem das Array ohne Duplikate berechnet wurde. Wenn Sie auf ein Duplikat stoßen, verschieben Sie die Elemente nach dem Duplikat nach links und dekrementieren den Endindex entsprechend.

Hier ist eine optimierte Version Ihres Codes, die diese Optimierungen verwendet:

public static int[] removeDuplicates(int[] arr) {
    // Initialize the marker array with zeros
    int[] marker = new int[1000000];
    int end = arr.length;

    for (int i = 0; i < end; i++) {
        // Check if the element is already marked as duplicate
        if (marker[arr[i]] == 1) {
            // If it's a duplicate, shift the elements after it to the left
            for (int j = i + 1; j < end; j++, i++) {
                arr[i] = arr[j];
            }
            end--;
            i--;
        } else {
            // If it's not a duplicate, mark it in the marker array
            marker[arr[i]] = 1;
        }
    }

    return arr;
}
Nach dem Login kopieren

Diese Implementierung Verbessert die Leistung erheblich, indem mehrere Durchgänge über das Array vermieden und die Anzahl der erforderlichen Elementaustausche reduziert werden.

Das obige ist der detaillierte Inhalt vonWie kann ich Duplikate effizient aus einem Array entfernen, ohne Sets 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage