kk
This commit is contained in:
37
src/main/java/com/dota/gridGraph/_1765/Solution.java
Normal file
37
src/main/java/com/dota/gridGraph/_1765/Solution.java
Normal file
@@ -0,0 +1,37 @@
|
||||
package com.dota.gridGraph._1765;
|
||||
|
||||
import java.util.ArrayDeque;
|
||||
|
||||
class Solution {
|
||||
public int[][] highestPeak(int[][] isWater) {
|
||||
int n = isWater.length;
|
||||
int m = isWater[0].length;
|
||||
var queue = new ArrayDeque<int[]>();
|
||||
var book = new boolean[n][m];
|
||||
for (int i = 0; i < n; i++) {
|
||||
for (int j = 0; j < m; j++) {
|
||||
if (isWater[i][j] == 1) {
|
||||
queue.add(new int[]{i, j});
|
||||
isWater[i][j] = 0;
|
||||
book[i][j] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
var next = new int[][]{{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
|
||||
while (!queue.isEmpty()) {
|
||||
var xy = queue.poll();
|
||||
int x = xy[0];
|
||||
int y = xy[1];
|
||||
for (int[] ints : next) {
|
||||
int nextX = x + ints[0];
|
||||
int nextY = y + ints[1];
|
||||
if (nextX < 0 || nextY < 0 || nextX >= n || nextY >= m || book[nextX][nextY]) continue;
|
||||
isWater[nextX][nextY] = isWater[x][y] + 1;
|
||||
book[nextX][nextY] = true;
|
||||
queue.offer(new int[]{nextX, nextY});
|
||||
}
|
||||
}
|
||||
|
||||
return isWater;
|
||||
}
|
||||
}
|
77
src/main/java/com/dota/gridGraph/_827/Solution.java
Normal file
77
src/main/java/com/dota/gridGraph/_827/Solution.java
Normal file
@@ -0,0 +1,77 @@
|
||||
package com.dota.gridGraph._827;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
|
||||
class Solution {
|
||||
public int largestIsland(int[][] grid) {
|
||||
int res = 0;
|
||||
var map = new HashMap<Integer, Integer>();
|
||||
var idx = 2;
|
||||
for (int i = 0; i < grid.length; i++) {
|
||||
for (int j = 0; j < grid[0].length; j++) {
|
||||
if (grid[i][j] == 1) {
|
||||
goin(i, j, grid, idx, map);
|
||||
idx++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < grid.length; i++) {
|
||||
for (int j = 0; j < grid[0].length; j++) {
|
||||
if (grid[i][j] == 0) {
|
||||
int sum = df(i, j, grid, map);
|
||||
res = Math.max(res, sum);
|
||||
}
|
||||
}
|
||||
}
|
||||
int n = grid.length;
|
||||
return res==0?n*n:res;
|
||||
}
|
||||
|
||||
void goin(int i, int j, int[][] grid, int idx, HashMap<Integer, Integer> map) {
|
||||
if (i < 0 || j < 0 || i >= grid.length || j >= grid[0].length || grid[i][j] != 1) return;
|
||||
grid[i][j] = idx;
|
||||
map.merge(idx, 1, Integer::sum);
|
||||
goin(i - 1, j, grid, idx, map);
|
||||
goin(i + 1, j, grid, idx, map);
|
||||
goin(i, j - 1, grid, idx, map);
|
||||
goin(i, j + 1, grid, idx, map);
|
||||
}
|
||||
|
||||
int df(int i, int j, int[][] grid, HashMap<Integer, Integer> map) {
|
||||
var set = new HashSet<Integer>();
|
||||
int sum = 1;
|
||||
int t = dfs(i - 1, j, grid, map);
|
||||
if (t > 0) {
|
||||
sum += t;
|
||||
set.add(grid[i - 1][j]);
|
||||
}
|
||||
|
||||
t = dfs(i + 1, j, grid, map);
|
||||
if (t > 0 && !set.contains(grid[i + 1][j])) {
|
||||
sum += t;
|
||||
set.add(grid[i + 1][j]);
|
||||
}
|
||||
|
||||
t = dfs(i, j - 1, grid, map);
|
||||
if (t > 0 && !set.contains(grid[i][j - 1])) {
|
||||
sum += t;
|
||||
set.add(grid[i][j - 1]);
|
||||
}
|
||||
t = dfs(i, j + 1, grid, map);
|
||||
if (t > 0 && !set.contains(grid[i][j + 1])) {
|
||||
sum += t;
|
||||
set.add(grid[i][j + 1]);
|
||||
}
|
||||
return sum;
|
||||
}
|
||||
|
||||
int dfs(int i, int j, int[][] grid, HashMap<Integer, Integer> map) {
|
||||
if (i < 0 || j < 0 || i >= grid.length || j >= grid[0].length || grid[i][j] == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return map.get(grid[i][j]);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user