Heim > Java > javaLernprogramm > Wie kann ich doppelte Ganzzahlen in einem Java-Array effizient finden?

Wie kann ich doppelte Ganzzahlen in einem Java-Array effizient finden?

Susan Sarandon
Freigeben: 2024-12-11 01:36:13
Original
483 Leute haben es durchsucht

How Can I Efficiently Find Duplicate Integers in a Java Array?

Duplikate in einem Java-Array finden

Das Problem

Sie haben ein ganzzahliges Array und möchten alle Duplikate effizient identifizieren. Ihr ursprünglicher Code, der versucht, jedes Paar von Elementen zu vergleichen, kann Duplikate nicht genau erkennen, wenn keine vorhanden sind.

Das Problem

Der Fehler im Code liegt darin, dass er darauf angewiesen ist, dass das Duplikat-Flag initialisiert wird in allen Fällen zu falsch. Wenn keine Duplikate gefunden werden, setzt die Schleife die Duplikate dennoch auf „true“, wenn die diagonalen Elemente überprüft werden (d. h. wenn j == k).

Eine differenziertere Lösung

Um dieses Problem zu beheben, stellen Sie sicher dass das Duplikat-Flag nur dann auf „true“ gesetzt wird, wenn tatsächliche Duplikate gefunden werden. Dies kann erreicht werden, indem Vergleiche von zipcodeList[j] mit sich selbst weggelassen werden, wenn j == k.

Hier ist der überarbeitete Code:

duplicates = false;
for (int j = 0; j < zipcodeList.length; j++) {
    for (int k = 0; k < zipcodeList.length; k++) {
        if (k != j && zipcodeList[k] == zipcodeList[j]) {
            duplicates = true;
        }
    }
}
Nach dem Login kopieren

Ein schnellerer Ansatz

Der Die obige Lösung hat eine Laufzeitkomplexität von O(n2), wobei n die Anzahl der Elemente im Array ist. Bei großen Arrays kann dieser Ansatz ineffizient sein.

Eine effizientere Methode zur Erkennung von Duplikaten ist die Nutzung eines Hash-basierten Ansatzes, der die Zeitkomplexität auf O(n) reduziert. Hier ist ein Beispiel mit einem HashSet:

boolean duplicates(int[] zipcodeList) {
    Set<Integer> lump = new HashSet<>();
    for (int zipcode : zipcodeList) {
        if (lump.contains(zipcode)) {
            return true;
        }
        lump.add(zipcode);
    }
    return false;
}
Nach dem Login kopieren

Alternativ kann eine O(n)-Lösung mithilfe eines booleschen[]-Arrays (Bitmap) erreicht werden, um zuvor angetroffene Elemente zu verfolgen und Duplikate auf „true“ zu setzen, wenn ein Element vorhanden ist Ein zweites Mal angetroffen.

Fazit

Abhängig von der Größe des Eingabearrays und der Häufigkeit von Duplikaten hängt die Wahl des Ansatzes ab sollte so zugeschnitten sein, dass die Effizienz optimiert wird.

Das obige ist der detaillierte Inhalt vonWie kann ich doppelte Ganzzahlen in einem Java-Array effizient finden?. 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