難度: 困難
主題: 陣列、廣度優先搜尋、堆疊(優先隊列)、矩陣
給定一個 m x n 的整數矩陣 heightMap
,表示二維高程圖中每個單元格的高度,返回下雨後它可以積蓄的水量。
範例 1:
heightMap
= [[1,4,3,1,3,2],[3,2,1,3,2,4],[2,3,3 ,2,3,1]]範例 2:
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]]約束條件:
解:
「蓄水池 II」問題是一個具有挑戰性的計算問題,需要我們計算二維高程圖(表示為矩陣)下雨後積蓄的水量。這個問題將經典的「蓄水池」問題擴展到二維,由於需要考慮所有方向的水流,因此解決方案更加複雜。
heightMap
矩陣包含每個單元格的海拔高度。 此解決方案利用廣度優先搜尋 (BFS) 方法,由優先隊列 (最小堆) 指導:
初始化:
插入邊界單元格:
BFS 遍歷:
回傳結果:
讓我們在 PHP 中實現此解決方案:407. 蓄水池 II
<code class="language-php"><?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 ?></code>
邊界初始化:
堆提:
鄰居探索:
累積水:
<code>$heightMap = [ [1, 4, 3, 1, 3, 2], [3, 2, 1, 3, 2, 4], [2, 3, 3, 2, 3, 1] ];</code>
邊界單元:
堆遍歷:
積蓄的水:
堆操作:
鄰居迭代:
*O(m n log(m n))**
<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>
「蓄水池 II」問題展示了高階資料結構(如優先隊列)與 BFS 結合的強大功能。透過模擬二維高程圖中的水流,我們可以有效地計算積蓄的總水量。由於其對數堆操作,此解決方案對於處理大型矩陣是最佳的。
(此處應包含完整的PHP解決方案代碼,由於篇幅限制,我無法在此處提供。請參考原問題描述中的./solution.php
文件獲取完整的代碼實現。)
以上是。收集雨水 II的詳細內容。更多資訊請關注PHP中文網其他相關文章!