난이도: 어려움
주제: 배열, 너비 우선 검색, 힙(우선순위 큐), 행렬
2D 고도 지도에서 각 셀의 높이를 나타내는 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' 문제는 2차원 고도 지도(행렬로 표시됨)에 비가 내린 후 쌓인 물의 양을 계산해야 하는 까다로운 계산 문제입니다. 이 문제는 고전적인 "저장소" 문제를 2차원으로 확장하여 모든 방향의 흐름을 고려해야 하기 때문에 솔루션을 더욱 복잡하게 만듭니다.
heightMap
행렬에는 각 셀의 고도가 포함됩니다. 이 솔루션은 우선순위 큐(최소 힙)에 따라 진행되는 폭 우선 검색(BFS) 접근 방식을 활용합니다.
초기화:
테두리 셀 삽입:
BFS 순회:
반환 결과:
이 솔루션을 PHP로 구현해 보겠습니다. 407 Reservoir 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 ?> <h3>설명: </h3> <ol> <li> <p><strong>경계 초기화</strong>:</p> <ul> <li>모든 경계 셀이 더미에 추가되어 컨테이너의 외벽을 형성합니다. </li> </ul> </li> <li> <p><strong>힙 추출</strong>:</p> <ul> <li>물이 안쪽으로 흐르지 않고 바깥쪽으로만 흐르도록 높이가 가장 낮은 셀을 추출합니다. </li> </ul> </li> <li> <p><strong>이웃 탐색</strong>:</p> <ul> <li>각 이웃에 대해: <ul> <li> 범위 내에 있고 액세스되지 않았는지 확인하세요. </li> <li>적어진 물의 양을 max(0, currentHeight - neighborHeight)로 계산합니다. </li> <li> 업데이트된 이웃 높이를 힙에 푸시합니다. </li> </ul> </li> </ul> </li> <li> <p><strong>누적된 물</strong>:</p> <ul> <li>각 이웃의 물 저장량을 합계에 더합니다. </li> </ul> </li> </ol> <h2><strong>샘플 둘러보기</strong></h2> <h3>입력: </h3> <pre class="brush:php;toolbar:false"><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와 결합된 우선순위 큐와 같은 고급 데이터 구조의 강력함을 보여줍니다. 2D 입면도에서 물의 흐름을 시뮬레이션함으로써 저장된 물의 총량을 효율적으로 계산할 수 있습니다. 로그 힙 작업으로 인해 이 솔루션은 대규모 행렬을 처리하는 데 최적입니다.
(전체 PHP 솔루션 코드는 여기에 포함되어야 합니다. 공간 제한으로 인해 여기에 제공할 수 없습니다. 전체 코드 구현은 원래 문제 설명의 ./solution.php
파일을 참조하세요.)
위 내용은 . 빗물 가두기 II의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!