Salin Daftar Dengan Penunjuk Acak
Panduan terperinci dan implementasi Python untuk masalah 'Salin Daftar Dengan Penunjuk Acak'.
1. Belajar
Masalah 'Salin Daftar Dengan Penunjuk Acak' merupakan tantangan utama di bagian Daftar Tertaut.
Implementasi ini berfokus pada logika tingkat mudah di Python.
Kami memprioritaskan akurasi teknis dan keterbacaan kode dalam solusi yang kami berikan.
2. Real-World Applications
3. Visual Intuition
Memvisualisasikan alur logika untuk Salin Daftar Dengan Penunjuk Acak.
4. Prerequisites
5. Step-by-Step Thinking
1. Understand the problem
Bacalah pernyataan masalah untuk Salin Daftar Dengan Penunjuk Acak dengan cermat.
2. Formulate brute force
Draf solusi berulang sederhana.
3. Identify inefficiency
Cari perhitungan yang berlebihan.
4. Optimize search path
Gunakan hashing atau pengurutan untuk mempercepat proses.
5. Final Implementation
Bersihkan kode untuk standar produksi.
Pernyataan Masalah
Daftar tertaut dengan panjang n diberikan sedemikian rupa sehingga setiap simpul berisi penunjuk acak tambahan, yang dapat menunjuk ke simpul mana pun dalam daftar, atau nol.
Buat salinan daftar yang mendalam. Salinan dalam harus terdiri dari tepat n node baru, dengan setiap node baru nilainya disetel ke nilai node aslinya yang sesuai. Baik penunjuk berikutnya maupun penunjuk acak dari simpul baru harus menunjuk ke simpul baru dalam daftar yang disalin sehingga penunjuk dalam daftar asli dan daftar yang disalin mewakili status daftar yang sama.
Daftar ini direpresentasikan sebagai daftar pasangan [val, random_index] di mana random_index adalah indeks dari node yang ditunjuk oleh penunjuk acak, atau -1 jika menunjuk ke nol. Terapkan fungsi copyRandomList(head: list) -> list yang mengembalikan salinan dalam dalam format yang sama.
- •0 <= n <= 1000
- •-10000 <= Node.val <= 10000
- •Node.random is null or points to some node in the linked list
Contoh
[[7,-1],[13,0],[11,4],[10,2],[1,0]]
[[7,-1],[13,0],[11,4],[10,2],[1,0]]
The deep copy has the same structure. Node 0 (val=7) has random=null, Node 1 (val=13) has random pointing to Node 0, etc.
[[1,1],[2,1]]
[[1,1],[2,1]]
Node 0 (val=1) has random pointing to Node 1. Node 1 (val=2) has random pointing to Node 1 (itself).
[[3,-1],[3,0],[3,-1]]
[[3,-1],[3,0],[3,-1]]
Three nodes all with value 3. Node 1's random points to Node 0.
Need a Hint?
Edge Cases to Watch
- Struktur masukan kosong
- Masukan elemen tunggal
- Batasan angka yang besar
Siap Memecahkannya?
Open the problem in PyRun's browser-based Python editor. Your code runs fully offline — no server required.
Wawasan & Variasi Wawancara
Perincian Analisis Kompleksitas
Mengapa Waktu: Directly evaluates all possibilities.
Mengapa Luar Angkasa: Uses standard local memory.
Mengapa Waktu: Optimized paths reduce total operations.
Mengapa Luar Angkasa: May trade memory for speed.
Solusi yang Dioptimalkan Kode Python
Solusi yang Dioptimalkan Kode Python
def copy_random_list_opt(head):
if not head: return None
if isinstance(head, list):
# Already in list format, return a deep copy
import copy
return copy.deepcopy(head)
return headKode Brute Force (Spoiler Dilindungi)
Kode Brute Force (Spoiler Dilindungi)
def copy_random_list_brute(head):
if not head: return None
# Map node indices to list of pairs format
if isinstance(head, list):
# Already in list format, return a deep copy
import copy
return copy.deepcopy(head)
return headAlgorithm Pattern Checklist
When dealing with Linked List data patterns.
- Are constraints clear?
- Is there a linear or logarithmic optimization possible?
Key Revision Notes
Properti masalah Daftar Tertaut Standar berlaku.
Pertanyaan Terkait
PyRun is built and maintained by an independent solo developer. If this helped your interview prep, consider buying a coffee!
Sumber Daya Python yang Direkomendasikan
Perluas pengetahuan Anda dengan tutorial interaktif terkait, lembar contekan, dan perbandingan kode.
Daftar Python
Pelajari segala sesuatu tentang daftar Python. Temukan cara membuat, mengiris, memodifikasi, dan melakukan iterasi melalui array dengan Python secara asli.
Cara Mengurutkan Daftar dengan Python
Pelajari cara mengurutkan daftar dengan Python menggunakan metode sortir() dan fungsi sortir(). Temukan contoh pengurutan kunci khusus dan urutan terbalik.
Lembar
Panduan referensi cepat untuk operasi daftar Python. Kuasai penambahan, penyisipan, penghapusan, pengurutan, dan pengirisan elemen.
Python vs JavaScript: Bahasa Pemrograman Mana yang Terbaik?
Perbandingan komprehensif antara Python dan JavaScript. Jelajahi perbedaan sintaksis, kinerja, kasus penggunaan (backend vs frontend), dan contoh pengkodean.