- 제2저수지
난이도: 어려움
주제: 배열, 너비 우선 검색, 힙(우선순위 큐), 행렬
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]] - 출력: 4
-
설명: 비가 온 후 블록 사이에 물이 갇히게 됩니다.
- 각각 1유닛과 3유닛의 물을 담는 두 개의 작은 수영장이 있습니다.
- 절약된 물의 양은 총 4개입니다.
예 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]] - 출력: 10
제약조건:
- m == heightMap.length
- n == heightMap[i].length
- 1
- 0
해결책:
'저수지 II' 문제는 2차원 고도 지도(행렬로 표시됨)에 비가 내린 후 쌓인 물의 양을 계산해야 하는 까다로운 계산 문제입니다. 이 문제는 고전적인 "저장소" 문제를 2차원으로 확장하여 모든 방향의 흐름을 고려해야 하기 때문에 솔루션을 더욱 복잡하게 만듭니다.
핵심사항
-
행렬 표현:
heightMap
행렬에는 각 셀의 고도가 포함됩니다. - 경계 제약: 물은 경계 셀 밖으로 흘러나올 수 없습니다.
- 힙 데이터 구조: 최소 힙(우선순위 큐)은 수위를 동적으로 시뮬레이션하는 데 사용됩니다.
- 방문 매트릭스: 반복적인 셀 방문을 피하기 위해 방문한 노드를 추적합니다.
방법
이 솔루션은 우선순위 큐(최소 힙)에 따라 진행되는 폭 우선 검색(BFS) 접근 방식을 활용합니다.
- 모든 경계 셀을 최소 힙에 추가하고 방문한 것으로 표시합니다.
- 높이가 증가하는 순서로 셀 처리:
- 각 셀마다 이웃 셀에 물을 '비축'해 보세요.
- 이웃 셀과 업데이트된 높이 값을 힙에 푸시합니다.
- 현재 셀과 이웃 셀의 높이 차이를 기준으로 축적된 물의 양을 누적합니다.
계획
-
초기화:
- 행렬 크기와 극단적인 사례를 정의합니다.
- 경계 셀의 최소 힙을 초기화합니다.
- 방문 행렬을 만듭니다.
-
테두리 셀 삽입:
- 모든 경계 셀과 해당 높이 값을 힙에 푸시합니다.
- 방문한 것으로 표시하세요.
-
BFS 순회:
- 힙이 비어 있지 않으면 높이가 가장 작은 셀을 추출합니다.
- 모든 이웃을 확인하고 물 보유량을 계산하세요.
- 이웃이 낮을수록 높이 차이로 인해 저장되는 물의 양이 늘어납니다.
- 이웃의 키가 더 크면 이웃의 높이를 현재 셀의 높이로 업데이트하세요.
- 이웃을 힙으로 푸시하고 방문한 것으로 표시합니다.
-
반환 결과:
- 누적된 물의 양은 누적된 빗물을 나타냅니다.
이 솔루션을 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 ?>
설명:
-
경계 초기화:
- 모든 경계 셀이 더미에 추가되어 컨테이너의 외벽을 형성합니다.
-
힙 추출:
- 물이 안쪽으로 흐르지 않고 바깥쪽으로만 흐르도록 높이가 가장 낮은 셀을 추출합니다.
-
이웃 탐색:
- 각 이웃에 대해:
- 범위 내에 있고 액세스되지 않았는지 확인하세요.
- 적어진 물의 양을 max(0, currentHeight - neighborHeight)로 계산합니다.
- 업데이트된 이웃 높이를 힙에 푸시합니다.
- 각 이웃에 대해:
-
누적된 물:
- 각 이웃의 물 저장량을 합계에 더합니다.
샘플 둘러보기
입력:
<code>$heightMap = [ [1, 4, 3, 1, 3, 2], [3, 2, 1, 3, 2, 4], [2, 3, 3, 2, 3, 1] ];</code>
단계:
-
테두리 셀:
- 경계 셀과 해당 높이를 힙으로 푸시합니다.
- 예: (0, 0, 1), (0, 1, 4) 등
- 경계 셀과 해당 높이를 힙으로 푸시합니다.
-
힙 순회:
- 셀(0, 0, 1)(가장 낮은 높이)을 추출합니다.
- 이웃을 확인하고 물 절약량 계산하기:
- 이웃(1, 0)의 경우: 누적된 물 = max(0, 1 - 3) = 0.
-
물 절약:
- 모든 셀을 방문할 때까지 계속 처리합니다.
- 총 물 절약량 = 4.
- 모든 셀을 방문할 때까지 계속 처리합니다.
시간복잡도
-
힙 작업:
- 각 셀은 O(m n log(m * n))으로 한 번씩 힙에 푸시되고 팝됩니다.
-
이웃 반복:
- 각 셀에는 최대 4개의 이웃(O(m * n))이 있습니다.
전체적인 복잡성:
*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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

phpidifiesauser의 sssessionusessessioncookiesandssessionids.1) whensession_start () iscalled, phpgeneratesauniquessessionStoredInacookienamedPhpsSessIdonSeuser 'sbrowser.2) thisidallowsphptoretrievessessionDataTromServer.

PHP 세션의 보안은 다음 측정을 통해 달성 할 수 있습니다. 1. Session_REGENEREAT_ID ()를 사용하여 사용자가 로그인하거나 중요한 작업 일 때 세션 ID를 재생합니다. 2. HTTPS 프로토콜을 통해 전송 세션 ID를 암호화합니다. 3. 세션 _save_path ()를 사용하여 세션 데이터를 저장하고 권한을 올바르게 설정할 보안 디렉토리를 지정하십시오.

phpsessionfilesarestoredInTheRectorySpecifiedBysession.save_path, 일반적으로/tmponunix-likesystemsorc : \ windows \ temponwindows.tocustomizethis : 1) austession_save_path () toSetacustomDirectory, verlyTeCustory-swritation;

toretrievedatafromAphPsession, startSessionstart_start () andaccessvariblesinthe $ _sessionArray.forexample : 1) startthessession : session_start (). 2) retrievedata : $ _ session [ 'username']; echo "Welcome,". $ username;

세션을 사용하여 효율적인 쇼핑 카트 시스템을 구축하는 단계에는 다음이 포함됩니다. 1) 세션의 정의와 기능을 이해합니다. 세션은 요청에 따라 사용자 상태를 유지하는 데 사용되는 서버 측 스토리지 메커니즘입니다. 2) 쇼핑 카트에 제품 추가와 같은 기본 세션 관리를 구현합니다. 3) 제품 수량 관리 및 삭제 지원 고급 사용으로 확장; 4) 세션 데이터를 지속하고 보안 세션 식별자를 사용하여 성능 및 보안을 최적화합니다.

이 기사는 PHP의 인터페이스를 생성, 구현 및 사용하는 방법을 설명하여 코드 구성 및 유지 관리에 대한 이점에 중점을 둡니다.

이 기사에서는 PHP의 암호 해싱에 대한 Crypt ()와 Password_hash ()의 차이점에 대해 논의하여 최신 웹 애플리케이션에 대한 구현, 보안 및 적합성에 중점을 둡니다.

기사는 입력 유효성 검사, 출력 인코딩 및 OWASP ESAPI 및 HTML 청정기와 같은 도구를 통해 PHP의 크로스 사이트 스크립팅 (XSS) 방지에 대해 논의합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

드림위버 CS6
시각적 웹 개발 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기
