[LeetCode] 407トラップ雨水II

収集雨水ビス。質問の意味42個の質問は非常に近いですが、2次元から3次元になっています。アイデアはを参照してくださいポストの偉大な神をgrandyangJavaのと私が持っている問題。

時間O(M * N *ログ(M + N))

スペースO(M * N)

1  クラスソリューション{
 2      のint [] [] DIRS = 新しい INT [] [] {{1,0}、{-1、0}、{0,1}、{0、-1 }}。
3  
4      公共 INT trapRainWater(INT [] []ハイト){
 5          INT M = heightMap.length。
6          INT N =(M == 0:ハイト[0 ] .LENGTH)。
7          INT RES = 0 8  
9          優先度つきキュー< INT []> PQ = 新しい優先度つきキュー<>((A、B) - > [2] - 、B [2 ])。
10個の         ブール [] []訪問=新しい ブール[M] [N]。
11          のためにINT iは= 0; I <M; iは++ ){
 12              pq.offer(新しい INT [] {I、0、ハイト[I] [0 ]})。
13              pq.offer(新しい INT [] {I、N - 1、ハイト[I] [N - 1 ]})。
14              訪問[I] [0] [i]は[N - 1]訪問== 15          }
 16          のためのint型、J <N - 1、J = 1 J ++ ){
 17              pq.offer(新しい INT [] {0、J、ハイト[0 ] [J]})。
18              pq.offer(新しい INT [] {M - 1、J、ハイト[M - 1 ] [J]})。
19              訪問[0] [j]は[M - 1]訪問= [J] = 20          }
 21  
22          ながら(!pq.isEmpty()){
 23              のint []セル= pq.poll()。
24              のためにINT [] D:DIRS){
 25                  、INT iはセル[0] + D [0]、J =セル[1] + D [1 = ]。
26                  もし(I <0 || I> = M || J <0 || J> = N || 訪問[I] [J]){
 27                      続けます28                 }
 29の                  RES + = Math.max(0、セル[2] - ハイト[I] [J])。
30                  pq.offer(新しい INT [] {I、J、Math.max(ハイト[I]、[J]、セル[2 ])})。
31                  訪問[I] [J] = ;
32              }
 33          }
 34の         リターンRES。
35      }
 36 }

おすすめ

転載: www.cnblogs.com/aaronliu1991/p/12159272.html