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.
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).
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; } } }
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; }
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.
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!