Heim >Backend-Entwicklung >C++ >Wie finde ich Duplikate in einem Array mit optimaler zeitlicher und räumlicher Komplexität?

Wie finde ich Duplikate in einem Array mit optimaler zeitlicher und räumlicher Komplexität?

DDD
DDDOriginal
2024-10-30 19:20:30737Durchsuche

How to Find Duplicates in an Array with Optimal Time and Space Complexity?

Duplikate mit optimaler zeitlicher und räumlicher Komplexität finden

Einführung:
Die Aufgabe, doppelte Elemente in zu erkennen Ein Array ist ein weit verbreitetes Problem bei der Programmierung. Lösungen, die Hilfsdatenstrukturen wie Hash-Tabellen verwenden, bieten zwar Einfachheit, beeinträchtigen jedoch die Platzeffizienz. In diesem Artikel wird ein genialer Algorithmus vorgestellt, der Duplikate in linearer Zeit O(n) identifiziert und dabei den Speicherplatzverbrauch O(1) konstant hält.

Problemstellung:
Angesichts eines Arrays von n Elementen im Bereich von 0 bis n-1, wobei einige Zahlen mehrmals vorkommen können, finden Sie die doppelten Elemente im Array.

Optimaler Algorithmus:

// Iterate through the array
for i = 0 to n - 1:
    // Swap elements until A[A[i]] = A[i]
    while A[A[i]] != A[i]:
        swap(A[i], A[A[i]])
    end while

// Identify duplicates based on A[i] != i
for i = 0 to n - 1:
    if A[i] != i:
        print A[i]
    end if
end for

Einsicht:
Der Algorithmus nutzt die Tatsache, dass sich jedes Element im Array idealerweise an seinem Index befinden sollte. Es verwendet die Elemente des Arrays, um eine Permutation zu erstellen und sicherzustellen, dass vorhandene Elemente ihren richtigen Indizes zugeordnet werden. Die erste Schleife durchläuft das Array und stellt sicher, dass jedes Element durch Swaps seinen vorgesehenen Index erreicht.

Erklärung:
Die erste Schleife permutiert das Array, sodass für jedes Element x, if Wenn es mindestens einmal vorkommt, befindet sich eine Instanz am Index A[x]. Bei jedem Austausch wird ein Eintrag korrigiert, der einem falschen Element entspricht, wodurch sichergestellt wird, dass die Gesamtzahl der Austauschvorgänge durch die Anzahl der Elemente N-1 begrenzt ist.

Die zweite Schleife identifiziert Duplikate, indem der Index jedes Elements gedruckt wird Element, das nicht mit seinem Index übereinstimmt, was darauf hinweist, dass es im ursprünglichen Array nicht vorhanden ist.

Schlussfolgerung:
Dieser Algorithmus identifiziert effizient doppelte Elemente in einem Array, indem er das Eingabearray geschickt nutzt selbst. Aufgrund seiner O(n)-Zeit- und O(1)-Raumkomplexität eignet es sich für eine Vielzahl praktischer Anwendungen.

Das obige ist der detaillierte Inhalt vonWie finde ich Duplikate in einem Array mit optimaler zeitlicher und räumlicher Komplexität?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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