Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution {
- public List<int[]> pacificAtlantic(int[][] matrix) {
- List<int[]> list = new ArrayList<>();
- if(matrix == null || matrix.length < 1 || matrix[0].length < 1) return list;
- int m = matrix.length, n = matrix[0].length;
- int[][] f = new int[m][n];
- for(int i = 0; i < m; i++)
- {
- fill(matrix, i, 0, f, 0);
- fill(matrix, i, n - 1, f, 1);
- }
- for(int j = 0; j < n; j++)
- {
- fill(matrix, 0, j, f, 0);
- fill(matrix, m - 1, j, f, 1);
- }
- for(int i = 0; i < m; i++)
- {
- for(int j = 0; j < n; j++)
- {
- if(f[i][j] == 3) list.add(new int[]{i, j});
- }
- }
- return list;
- }
- void fill(int[][] matrix, int i, int j, int[][] f, int source)
- {
- int m = matrix.length, n = matrix[0].length, inf = Integer.MAX_VALUE;
- int[] dx = {1, 0, -1, 0}, dy = {0, 1, 0, -1};
- if((f[i][j] & (1 << source)) != 0) return;
- f[i][j] |= 1 << source;
- for(int k = 0; k < 4; k++)
- {
- int ni = i + dx[k], nj = j + dy[k];
- if(ni < 0 || nj < 0 || ni >= m || nj >= n || matrix[ni][nj] < matrix[i][j]) continue;
- fill(matrix, ni, nj, f, source);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment