题目
给你一个 m x n 的矩阵,其中的值均为非负整数,代表二维高度图每个单元的高度,请计算图中形状最多能接多少体积的雨水。
思路
最小堆
代码
class Solution {
public int trapRainWater(int[][] heightMap) {
int m = heightMap.length;
int n = heightMap[0].length;
if(m<=2||n<=2)return 0;
boolean[][] visit = new boolean[m][n];
PriorityQueue<int[]> pq = new PriorityQueue<>((a,b)->a[1]-b[1]);
for(int i=0;i<m;++i){
for(int j=0;j<n;++j){
if(i==0||i==m-1||j==0||j==n-1){
pq.offer(new int[]{i*n+j,heightMap[i][j]});
visit[i][j]=true;
}
}
}
int res=0;
int[] dirs = {-1,0,1,0,-1};
while(!pq.isEmpty()){
int[] cur = pq.poll();
for(int k=0;k<4;++k){
int nx = cur[0]/n+dirs[k];
int ny = cur[0]%n+dirs[k+1];
if(nx>=0 &&nx<m &&ny>=0&&ny<n&&!visit[nx][ny]){
if(cur[1]>heightMap[nx][ny]){
res+=cur[1]-heightMap[nx][ny];
}
pq.offer(new int[]{nx*n+ny,Math.max(heightMap[nx][ny],cur[1])});
visit[nx][ny]=true;
}
}
}
return res;
}
}