This commit is contained in:
kkunkka
2025-07-28 14:08:52 +08:00
parent dc614a018d
commit 6535ca52a7
2 changed files with 114 additions and 0 deletions

View 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;
}
}

View 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]);
}
}