Heim > Backend-Entwicklung > C++ > Hauptteil

Wie finde ich Duplikate in einem Array mit O(n)-Zeit und O(1)-Raum?

Linda Hamilton
Freigeben: 2024-11-02 14:57:29
Original
208 Leute haben es durchsucht

How to Find Duplicates in an Array with O(n) Time and O(1) Space?

Effizienter Algorithmus zum Finden von Duplikaten in O(n)-Zeit und O(1)-Raum

In dieser Programmierherausforderung suchen wir einen effizienten Algorithmus zum Identifizieren und Drucken doppelter Elemente in einem Array von Ganzzahlen im Bereich von 0 bis n-1, mit möglichen Wiederholungen. Die Herausforderung erfordert einen Algorithmus, der innerhalb einer O(n)-Zeitkomplexität arbeitet und nur konstanten Speicherplatz verbraucht.

Ein wirksamer Ansatz für dieses Problem ist die Technik der „Array-Modifikation“. Der Algorithmus funktioniert wie folgt:

  1. Erste Schleife:

    • Initialisieren Sie eine Schleife, die jedes Element im Array durchläuft, bezeichnet als A[i].
    • Bestimmen Sie für jedes A[i], ob A[A[i]] gleich A[i] ist.
    • Wenn nicht, tauschen Sie A[i] mit A[ A[i]].
  2. Zweite Schleife:

    • Schleife zurücksetzen, um über jedes A[i] zu iterieren noch einmal.
    • Für jedes A[i], das nicht gleich i ist, geben Sie A[i] aus. Dieser Schritt identifiziert die doppelten Elemente, da bei jedem nicht duplizierten Element A[A[i]] gleich i ist (d. h. es befindet sich an der richtigen Position).

Dieser Algorithmus arbeitet in O(n)-Zeiten, da jedes Element in der ersten Schleife höchstens einmal überprüft und geändert wird. Da außerdem keine zusätzlichen Datenstrukturen verwendet werden, wird nur O(1)-Speicherplatz verwendet.

Betrachten Sie beispielsweise das Eingabearray {1, 2, 3, 1, 3, 0, 6}. Nach der Ausführung des Algorithmus wird das Array wie folgt geändert:

[1, 2, 3, 1, 3, 0, 0]
Nach dem Login kopieren

Die zweite Schleife druckt dann die doppelten Elemente 1 und 3.

Das obige ist der detaillierte Inhalt vonWie finde ich Duplikate in einem Array mit O(n)-Zeit und O(1)-Raum?. 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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!