725. Pisah Senarai Terpaut dalam Bahagian
Kesukaran: Sederhana
Topik: Senarai Terpaut
Memandangkan ketua senarai terpaut tunggal dan integer k, bahagikan senarai terpaut kepada k bahagian senarai terpaut berturut-turut.
Panjang setiap bahagian hendaklah sama yang mungkin: tiada dua bahagian harus mempunyai saiz yang berbeza lebih daripada satu. Ini boleh menyebabkan sesetengah bahagian menjadi batal.
Bahagian tersebut hendaklah mengikut urutan kejadian dalam senarai input dan bahagian yang berlaku lebih awal hendaklah sentiasa mempunyai saiz yang lebih besar daripada atau sama dengan bahagian yang berlaku kemudian.
Kembalikan tatasusunan bahagian k.
Contoh 1:
Contoh 2:
Kekangan:
Petunjuk:
Penyelesaian:
Pemerhatian utama ialah bilangan nod dalam setiap bahagian tidak boleh berbeza lebih daripada 1. Ini bermakna:
Mari laksanakan penyelesaian ini dalam PHP: 725. Pisah Senarai Terpaut dalam Bahagian
<?php // Definition for singly-linked list. class ListNode { public $val = 0; public $next = null; function __construct($val = 0, $next = null) { $this->val = $val; $this->next = $next; } } /** * @param ListNode $head * @param Integer $k * @return ListNode[] */ function splitListToParts($head, $k) { ... ... ... /** * go to ./solution.php */ } // Helper function to create a linked list from an array function createLinkedList($arr) { $head = new ListNode($arr[0]); $current = $head; for ($i = 1; $i < count($arr); $i++) { $current->next = new ListNode($arr[$i]); $current = $current->next; } return $head; } // Helper function to print a linked list function printList($head) { $result = []; while ($head !== null) { $result[] = $head->val; $head = $head->next; } return $result; } // Test case 1 $head = createLinkedList([1, 2, 3]); $k = 5; $result = splitListToParts($head, $k); foreach ($result as $part) { print_r(printList($part)); } // Test case 2 $head = createLinkedList([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); $k = 3; $result = splitListToParts($head, $k); foreach ($result as $part) { print_r(printList($part)); } ?> <h3> Penjelasan: </h3> <ol> <li><p><strong>Kira Panjang</strong>: Kami mula-mula melintasi senarai terpaut untuk mencari panjangnya.</p></li> <li> <p><strong>Tentukan Bahagian</strong>:</p> <ul> <li>Kami mengira saiz_bahagian sebagai panjang // k, yang memberikan saiz minimum yang sepatutnya ada pada setiap bahagian.</li> <li>Kami mengira extra_nod sebagai panjang % k, yang memberikan bilangan bahagian yang sepatutnya mempunyai satu nod tambahan.</li> </ul> </li> <li> <p><strong>Bahagikan Senarai</strong>: Kami melingkari k bahagian dan membahagikan senarai:</p> <ul> <li>Untuk setiap bahagian, tetapkan saiz_bahagian + 1 nod jika ia sepatutnya mempunyai nod tambahan, jika tidak hanya saiz_bahagian.</li> <li>Pada penghujung setiap bahagian, kami memutuskan pautan ke senarai yang lain.</li> </ul> </li> <li><p><strong>Kendalikan Bahagian Null</strong>: Jika terdapat kurang nod daripada k, bahagian yang tinggal akan menjadi batal (kosong).</p></li> </ol> <h3> Kes Ujian </h3> <ul> <li> <strong>Contoh 1</strong>: </li> </ul> <pre class="brush:php;toolbar:false"> $head = [1,2,3]; $k = 5; Output: [[1],[2],[3],[],[]]
$head = [1,2,3,4,5,6,7,8,9,10]; $k = 3; Output: [[1,2,3,4],[5,6,7],[8,9,10]]
Penyelesaian ini membahagikan senarai terpaut dengan cekap kepada k bahagian dengan kerumitan masa (O(n + k)), dengan n ialah panjang senarai.
Pautan Kenalan
Jika anda mendapati siri ini membantu, sila pertimbangkan untuk memberi repositori bintang di GitHub atau berkongsi siaran pada rangkaian sosial kegemaran anda ?. Sokongan anda amat bermakna bagi saya!
Jika anda mahukan kandungan yang lebih berguna seperti ini, sila ikuti saya:
Atas ialah kandungan terperinci . Pisah Senarai Pautan dalam Bahagian. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!