- Takungan II
Kesukaran: Sukar
Topik: Tatasusunan, carian luas-dahulu, timbunan (baris gilir keutamaan), matriks
Diberikan matriks integer m x n heightMap
yang mewakili ketinggian setiap sel dalam peta ketinggian 2D, kembalikan jumlah air yang boleh terkumpul selepas hujan.
Contoh 1:
-
Input:
heightMap
= [[1,4,3,1,3,2],[3,2,1,3,2,4],[2,3,3 ,2,3,1]] - Output: 4
-
Penjelasan: Selepas hujan, air terperangkap di antara blok.
- Kami mempunyai dua kolam kecil yang masing-masing memuatkan 1 dan 3 unit air.
- Jumlah jumlah air yang disimpan ialah 4.
Contoh 2:
-
Input:
heightMap
= [[3,3,3,3,3],[3,2,2,2,3],[3,2,1,2,3 ],[3,2,2,2,3],[3,3,3,3,3]] - Output: 10
Kekangan:
- m == heightMap.length
- n == heightMap[i].panjang
- 1
- 0
Penyelesaian:
Masalah "Reservoir II" ialah masalah pengiraan yang mencabar yang memerlukan kita mengira jumlah air terkumpul selepas hujan turun pada peta ketinggian dua dimensi (diwakili sebagai matriks). Masalah ini memanjangkan masalah "takungan" klasik kepada dua dimensi, menjadikan penyelesaiannya lebih kompleks kerana aliran ke semua arah perlu dipertimbangkan.
Isi penting
-
Perwakilan Matriks: Matriks
heightMap
mengandungi ketinggian setiap sel. - Kekangan sempadan: Air tidak boleh mengalir keluar dari sel sempadan.
- Struktur data timbunan: Timbunan minimum (baris gilir keutamaan) digunakan untuk mensimulasikan paras air secara dinamik.
- Matriks Dilawati: Untuk mengelakkan lawatan berulang ke sel, kami menjejaki nod yang dilawati.
Kaedah
Penyelesaian menggunakan pendekatan Breadth-First Search (BFS), dipandu oleh Baris Keutamaan (Timbunan Min):
- Tambahkan semua sel sempadan pada timbunan min dan tandainya sebagai dilawati.
- Proses sel dalam susunan ketinggian yang semakin meningkat:
- Untuk setiap sel, cuba "menimbun" air di jirannya.
- Tolak sel jiran dan nilai ketinggiannya yang dikemas kini ke dalam timbunan.
- Kumpul jumlah air yang terkumpul berdasarkan perbezaan ketinggian antara sel semasa dan jirannya.
Rancang
-
Permulaan:
- Tentukan dimensi matriks dan sarung tepi.
- Mulakan timbunan min untuk sel sempadan.
- Buat matriks yang dilawati.
-
Masukkan sel sempadan:
- Tolak semua sel sempadan dan nilai ketinggiannya ke dalam timbunan.
- Tandai sebagai dilawati.
-
Perjalanan BFS:
- Apabila timbunan tidak kosong, ekstrak sel dengan ketinggian terkecil.
- Semak semua jirannya dan kira rizab air:
- Jika jiran lebih rendah, perbezaan ketinggian akan meningkatkan jumlah air yang disimpan.
- Jika jiran lebih tinggi, kemas kini ketinggian jiran kepada ketinggian sel semasa.
- Tolak jiran ke dalam timbunan dan tandakannya sebagai dilawati.
-
Hasil pulangan:
- Isipadu air terkumpul mewakili air hujan yang terkumpul.
Mari laksanakan penyelesaian ini dalam PHP: 407 Reservoir II
<?php /** * @param Integer[][] $heightMap * @return Integer */ function trapRainWater($heightMap) { // ... (解决方案代码将在此处) ... } // 示例用法 $heightMap1 = [[1, 4, 3, 1, 3, 2], [3, 2, 1, 3, 2, 4], [2, 3, 3, 2, 3, 1]]; $heightMap2 = [[3, 3, 3, 3, 3], [3, 2, 2, 2, 3], [3, 2, 1, 2, 3], [3, 2, 2, 2, 3], [3, 3, 3, 3, 3]]; echo trapRainWater($heightMap1) . "\n"; // 输出:4 echo trapRainWater($heightMap2) . "\n"; // 输出:10 ?>
Penjelasan:
-
Permulaan sempadan:
- Semua sel sempadan ditambah pada longgokan untuk membentuk dinding luar bekas.
-
Pengeluaran timbunan:
- Ekstrak sel dengan ketinggian paling rendah untuk memastikan air hanya boleh mengalir keluar dan tidak masuk.
-
Penerokaan Jiran:
- Untuk setiap jiran:
- Semak sama ada ia berada dalam julat dan tidak diakses.
- Kira jumlah air terkumpul sebagai max(0, currentHeight - neighborHeight).
- Tolak ketinggian jiran yang dikemas kini ke dalam timbunan.
- Untuk setiap jiran:
-
Air terkumpul:
- Tambahkan jumlah air simpanan setiap jiran kepada jumlah keseluruhan.
Contoh Panduan
Masukkan:
<code>$heightMap = [ [1, 4, 3, 1, 3, 2], [3, 2, 1, 3, 2, 4], [2, 3, 3, 2, 3, 1] ];</code>
Langkah:
-
Sel sempadan:
- Tolak sel sempadan dan ketinggiannya ke dalam timbunan:
- Contohnya: (0, 0, 1), (0, 1, 4), dsb.
- Tolak sel sempadan dan ketinggiannya ke dalam timbunan:
-
Perjalanan timbunan:
- Ekstrak sel (0, 0, 1) (ketinggian terendah).
- Semak jiran dan kira penjimatan air:
- Untuk jiran (1, 0): air terkumpul = maks(0, 1 - 3) = 0.
-
Air yang disimpan:
- Teruskan pemprosesan sehingga semua sel telah dilawati:
- Jumlah jumlah air yang disimpan = 4.
- Teruskan pemprosesan sehingga semua sel telah dilawati:
Kerumitan masa
-
Operasi timbunan:
- Setiap sel ditolak dan muncul ke dalam timbunan sekali: O(m n log(m * n)).
-
Lelaran Jiran:
- Setiap sel mempunyai paling banyak 4 jiran: O(m * n).
Jumlah kerumitan:
*O(m n log(m n))**
Contoh output
<code>$heightMap = [ [1, 4, 3, 1, 3, 2], [3, 2, 1, 3, 2, 4], [2, 3, 3, 2, 3, 1] ]; echo trapRainWater($heightMap); // 输出:4</code>
Masalah "Reservoir II" menunjukkan kekuatan struktur data lanjutan seperti baris gilir keutamaan digabungkan dengan BFS. Dengan mensimulasikan aliran air dalam peta ketinggian 2D, kita boleh mengira jumlah air yang disimpan dengan cekap. Disebabkan oleh operasi timbunan log, penyelesaian ini adalah optimum untuk memproses matriks besar.
(Kod penyelesaian PHP yang lengkap harus disertakan di sini. Disebabkan keterbatasan ruang, saya tidak dapat menyediakannya di sini. Sila rujuk fail ./solution.php
dalam huraian masalah asal untuk pelaksanaan kod yang lengkap.)
Atas ialah kandungan terperinci . Memerangkap Air Hujan II. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Phpsessionscanstorestrings, nombor, tatasusunan, andobjects.1.strings: textdatalikeusernames.2.numbers: integersorfloatsforcounters.3.Arrays: ListsLikeshoppingCarts.4.Objects: complextructureSturesthatareserialized.

Tostartaphpsession, usesession_start () atthescript'sbeginning.1) placeitbeforeanyoutputtosetthesessioncookie.2) usesessionsforusererdatalikeloginstatusorshoppingcarts.3)

Penjanaan semula sesi merujuk kepada menjana ID sesi baru dan membatalkan ID lama apabila pengguna melakukan operasi sensitif dalam kes serangan tetap sesi. Langkah-langkah pelaksanaan termasuk: 1. Mengesan Operasi Sensitif, 2. Menjana ID Sesi Baru, 3. Memusnahkan ID Sesi Lama, 4. Kemas kini maklumat sesi pengguna.

Sesi PHP mempunyai kesan yang signifikan terhadap prestasi aplikasi. Kaedah pengoptimuman termasuk: 1. Gunakan pangkalan data untuk menyimpan data sesi untuk meningkatkan kelajuan tindak balas; 2. Mengurangkan penggunaan data sesi dan hanya menyimpan maklumat yang diperlukan; 3. Gunakan pemproses sesi yang tidak menyekat untuk meningkatkan keupayaan konkurensi; 4. Laraskan masa tamat tempoh sesi untuk mengimbangi pengalaman pengguna dan beban pelayan; 5. Gunakan sesi berterusan untuk mengurangkan bilangan data membaca dan menulis masa.

Phpsessionsareserver-side, whilecookiesareclient-side.1) Sessionsstoredataontheserver, aremoresecure, andhandlelargerdata.2) cookiesstoredataontheclient, arelesssecure, andlimiteShorsionsforsionsforsionsforsionsforsionsforsionsforsionsforsionsforsionsforsionsforsionsforsionsforsionsforsionsforsionsforsionsforsionsforsionsforsionsforsionsforsionsforsionsforsionsforsions

Phpidentifierauser'sSessionusingSessionCookiesandSessionIds.1) whensession_start () ISCALLED, phpGeneratesAuniquesessionIdstoredinacookienamedPhpsessidontheUserer'sBrowser.2) ThisIdallowsPhptoretRievesSessionDataFromtheserver.

Keselamatan sesi PHP boleh dicapai melalui langkah -langkah berikut: 1. Gunakan session_regenerate_id () untuk menjana semula ID sesi apabila pengguna log masuk atau merupakan operasi penting. 2. Sulitkan ID sesi penghantaran melalui protokol HTTPS. 3. Gunakan session_save_path () untuk menentukan direktori selamat untuk menyimpan data sesi dan menetapkan kebenaran dengan betul.

PhpsessionFileSarestoredIntHedirectorySpecifiedBySession.save_path, biasanya/tmponunix-likesystemsorc: \ windows \ temponwindows.tocustomethis: 1) usession_save_path ()


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

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

VSCode Windows 64-bit Muat Turun
Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

SublimeText3 versi Inggeris
Disyorkan: Versi Win, menyokong gesaan kod!

MantisBT
Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan
