Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah anda boleh mencari pendua dalam susunan nombor dari 0 hingga n-1 dalam masa O(n) dan ruang O(1)?

Bagaimanakah anda boleh mencari pendua dalam susunan nombor dari 0 hingga n-1 dalam masa O(n) dan ruang O(1)?

Susan Sarandon
Susan Sarandonasal
2024-10-30 21:23:02716semak imbas

How can you find duplicates in an array of numbers from 0 to n-1 in O(n) time and O(1) space?

Mencari Pendua dalam O(n) Masa dan O(1) Ruang

Diberi tatasusunan n elemen yang mengandungi nombor dari 0 hingga n -1, di mana beberapa nombor mungkin muncul berbilang kali, matlamatnya adalah untuk mencari elemen pendua dalam masa O(n) dan menggunakan ruang ingatan malar.

Untuk mencapai matlamat ini, kita boleh menggunakan pendekatan menarik yang ' t memerlukan struktur data tambahan seperti jadual cincang.

Algoritma yang dicadangkan beroperasi seperti berikut:

  1. Gelung Permutasi:

    • Lelaran melalui tatasusunan untuk i dari 0 hingga n-1.
    • Di dalam gelung ini, lakukan langkah berikut sehingga A[A[i]] bersamaan dengan A[i]. Ini menunjukkan bahawa unsur A[i] berada dalam kedudukannya yang betul.
    • Tukar A[i] dengan A[A[i]]. Ini secara berkesan menggerakkan elemen A[i] selangkah lebih dekat ke kedudukannya yang betul.
  2. Gelung Pengenalan Pendua:

    • Lelaran melalui tatasusunan sekali lagi, daripada i daripada 0 kepada n-1.
    • Jika A[i] tidak sama dengan i, ini bermakna terdapat pendua i pada indeks A[i].
    • Cetak A[i] sebagai pendua.

Algoritma ini memastikan semua elemen pendua dikenal pasti. Gelung luar berjalan n kali, manakala gelung dalam berjalan paling banyak n-1 kali. Oleh itu, algoritma berjalan dalam masa O(n). Ia tidak menggunakan sebarang struktur data tambahan, yang bermaksud ia beroperasi dalam ruang O(1).

Kod yang disediakan menunjukkan pelaksanaan algoritma dalam C .

Atas ialah kandungan terperinci Bagaimanakah anda boleh mencari pendua dalam susunan nombor dari 0 hingga n-1 dalam masa O(n) dan ruang O(1)?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn