. Pisah Senarai Pautan dalam Bahagian
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:
- Input: kepala = [1,2,3], k = 5
- Output: [[1],[2],[3],[],[]]
-
Penjelasan:
- Output elemen pertama[0] mempunyai output[0].val = 1, output[0].seterusnya = null.
- Output elemen terakhir[4] adalah nol, tetapi perwakilan rentetannya sebagai ListNode ialah [].
Contoh 2:
- Input: kepala = [1,2,3,4,5,6,7,8,9,10], k = 3
- Output: [[1,2,3,4],[5,6,7],[8,9,10]]
-
Penjelasan:
- Input telah dibahagikan kepada bahagian berturut-turut dengan perbezaan saiz paling banyak 1, dan bahagian yang lebih awal adalah saiz yang lebih besar daripada bahagian yang terkemudian.
Kekangan:
- Bilangan nod dalam senarai berada dalam julat [0, 1000].
- 0 <= Node.val <= 1000
- 1 <= k <= 50
Petunjuk:
- Jika terdapat N nod dalam senarai dan k bahagian, maka setiap bahagian mempunyai N/k elemen, kecuali N%k bahagian pertama mempunyai satu tambahan.
Penyelesaian:
Pemerhatian utama ialah bilangan nod dalam setiap bahagian tidak boleh berbeza lebih daripada 1. Ini bermakna:
- Kira panjang senarai terpaut.
- Tentukan saiz minimum setiap bahagian (saiz_bahagian = panjang // k).
- Agihkan nod tambahan secara sama rata pada beberapa bahagian pertama (extra_nodes = panjang % k). Bahagian extra_nodes pertama harus mempunyai satu nod tambahan setiap satu.
Pendekatan
- Kira panjang: Lintas senarai terpaut untuk mencari jumlah bilangan nod.
-
Tentukan saiz setiap bahagian:
- Setiap bahagian hendaklah mempunyai sekurang-kurangnya panjang // k nod.
- Bagian % k panjang pertama harus mempunyai satu nod tambahan.
-
Bahagikan senarai: Gunakan gelung untuk membahagikan senarai terpaut kepada k bahagian. Untuk setiap bahagian:
- Jika ia sepatutnya mempunyai nod tambahan, tetapkan saiz_bahagian + 1 nod.
- Jika tidak, tetapkan nod saiz_bahagian.
- Bahagian nol: Jika senarai lebih pendek daripada k, beberapa bahagian akan kosong (null).
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],[],[]]
- Contoh 2:
$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:
- GitHub
Atas ialah kandungan terperinci . Pisah Senarai Pautan dalam Bahagian. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

11 skrip pemendek URL terbaik PHP (percuma dan premium)

Bekerja dengan Data Sesi Flash di Laravel

Bina aplikasi React dengan hujung belakang Laravel: Bahagian 2, React

Respons HTTP yang dipermudahkan dalam ujian Laravel

Curl dalam PHP: Cara Menggunakan Pelanjutan PHP Curl dalam API REST

12 skrip sembang php terbaik di codecanyon

Pengumuman Penyiasatan Situasi PHP 2025
