1422. Markah Maksimum Selepas Membahagikan Rentetan
Kesukaran: Mudah
Topik: Rentetan, Jumlah Awalan
Diberi rentetan sifar dan satu, kembalikan skor maksimum selepas membahagikan rentetan kepada dua tak kosong subrentetan (iaitu kiri subrentetan dan kanan subrentetan).
Skor selepas membelah rentetan ialah bilangan sifar dalam subrentetan kiri ditambah dengan bilangan satu di kanan subrentetan.
Contoh 1:
Contoh 2:
Contoh 3:
Kekangan:
Petunjuk:
Penyelesaian:
Kita boleh memanfaatkan pembayang yang diberikan dengan membuat prapengiraan jumlah awalan satu ('1') dalam rentetan. Begini cara kita boleh memecahkan penyelesaiannya:
Mari laksanakan penyelesaian ini dalam PHP: 1422. Markah Maksimum Selepas Membahagikan Rentetan
<?php /** * @param String $s * @return Integer */ function maxScore($s) { ... ... ... /** * go to ./solution.php */ } // Test cases $s1 = "011101"; $s2 = "00111"; $s3 = "1111"; echo "Input: $s1, Output: " . maxScore($s1) . PHP_EOL; // Output: 5 echo "Input: $s2, Output: " . maxScore($s2) . PHP_EOL; // Output: 5 echo "Input: $s3, Output: " . maxScore($s3) . PHP_EOL; // Output: 3 ?> <h3> Penjelasan: </h3> <ol> <li><p><strong>Pengiraan jumlah awalan</strong>: Kami mengira jumlah awalan satu dalam tatasusunan $prefixOneCount, di mana setiap indeks menyimpan kiraan terkumpul satu sehingga titik itu.</p></li> <li> <p><strong>Meletup atas kemungkinan pemisahan</strong>: Kami mula mengulangi setiap indeks i (dari 0 hingga n-2), di mana rentetan dipecahkan kepada bahagian kiri (dari 0 hingga i) dan bahagian kanan ( dari i 1 hingga n-1).</p> <ul> <li>Untuk setiap pemisahan, kira sifar dalam subrentetan kiri ($zeroCountLeft).</li> <li>Gunakan $prefixOneCount yang diprakira untuk mengira bilangan yang berada dalam subrentetan yang betul.</li> </ul> </li> <li><p><strong>Pengiraan skor</strong>: Markah untuk setiap pemisahan dikira sebagai jumlah sifar di bahagian kiri dan satu di bahagian kanan. Kami mengemas kini skor maksimum yang ditemui semasa lelaran ini.</p></li> <li><p><strong>Keputusan akhir</strong>: Fungsi mengembalikan markah maksimum yang ditemui semasa semua pemisahan.</p></li> </ol> <h3> Kerumitan: </h3> <ul> <li> <p><strong>Kerumitan Masa</strong>: <em><strong>O(n)</strong></em></p> <ul> <li>Prapengiraan jumlah awalan dan lelaran melalui rentetan kedua-duanya mengambil masa <em><strong>O(n)</strong></em>.</li> <li>Lelaran melalui rentetan untuk mengira markah juga memerlukan O(n).</li> <li>Oleh itu, jumlah kerumitan masa ialah O(n), yang cekap untuk saiz input yang diberikan (n ≤ 500).</li> </ul> </li> <li> <p><strong>Kerumitan Angkasa</strong>: <em><strong>O(n)</strong></em></p> <ul> <li>Susun atur jumlah awalan memerlukan <em><strong>O(n)</strong></em> ruang tambahan.</li> </ul> </li> </ul> <h3> Contoh: </h3> <pre class="brush:php;toolbar:false">echo maxScore("011101"); // Output: 5 echo maxScore("00111"); // Output: 5 echo maxScore("1111"); // Output: 3
Penyelesaian ini adalah optimum dan menangani masalah dalam kekangan.
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 Skor Maksimum Selepas Membahagikan Rentetan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!