| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 | 
							- import java.util.PriorityQueue;
 
- class Solution {
 
-     class Grid implements Comparable<Grid> {
 
-         int val;
 
-         int y;
 
-         int x;
 
-         Grid(int val, int y, int x) {
 
-             this.val = val;
 
-             this.y = y;
 
-             this.x = x;
 
-         }
 
-         @Override
 
-         public int compareTo(Grid that) {
 
-             return this.val - that.val; // Don't forget the "public"
 
-         }
 
-     }
 
-     int[] dy = new int[]{0, 1, 0, -1};
 
-     int[] dx = new int[]{1, 0, -1, 0};
 
-     public int trapRainWater(int[][] heightMap) {
 
-         int m, n;
 
-         if ((m = heightMap.length) == 0) return 0;
 
-         if ((n = heightMap[0].length) == 0) return 0;
 
-         PriorityQueue<Grid> pq = new PriorityQueue<>();
 
-         boolean[][] used = new boolean[m][n];
 
-         for (int i = 0; i < m; i++) {
 
-             pq.offer(new Grid(heightMap[i][0], i, 0));
 
-             pq.offer(new Grid(heightMap[i][n - 1], i, n - 1));
 
-             used[i][0] = true;
 
-             used[i][n - 1] = true;
 
-         }
 
-         for (int j = 1; j < n - 1; j++) {
 
-             pq.offer(new Grid(heightMap[0][j], 0, j));
 
-             pq.offer(new Grid(heightMap[m - 1][j], m - 1, j));
 
-             used[0][j] = true;
 
-             used[m - 1][j] = true;
 
-         }
 
-         int water = 0, height = 0;
 
-         while (!pq.isEmpty()) {
 
-             Grid curr = pq.poll();
 
-             if (height < curr.val) height = curr.val;
 
-             else water += height - curr.val;
 
-             for (int i = 0; i < 4; i++) {
 
-                 int ny = curr.y + dy[i], nx = curr.x + dx[i];
 
-                 if (ny < 0 || m <= ny || nx < 0 || n <= nx || used[ny][nx]) continue;
 
-                 pq.offer(new Grid(heightMap[ny][nx], ny, nx));
 
-                 used[ny][nx] = true;
 
-             }
 
-         }
 
-         return water;
 
-     }
 
- }
 
 
  |