kk
This commit is contained in:
24
src/main/java/com/dota/gridGraph/_1905/Solution.java
Normal file
24
src/main/java/com/dota/gridGraph/_1905/Solution.java
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
package com.dota.gridGraph._1905;
|
||||||
|
|
||||||
|
class Solution {
|
||||||
|
public int countSubIslands(int[][] grid1, int[][] grid2) {
|
||||||
|
int res = 0;
|
||||||
|
for (int i = 0; i < grid1.length; i++) {
|
||||||
|
for (int j = 0; j < grid1[i].length; j++) {
|
||||||
|
if (grid2[i][j]==1 && dfs(grid1, grid2, i, j)) res++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean dfs(int[][] grid1, int[][] grid2, int row, int col) {
|
||||||
|
if (row < 0 || row >= grid1.length || col < 0 || col >= grid2[0].length) return true;
|
||||||
|
if (grid2[row][col] == 2 || grid2[row][col]==0) return true;
|
||||||
|
grid2[row][col] = 2;
|
||||||
|
return grid1[row][col] == 1 &
|
||||||
|
dfs(grid1, grid2, row + 1, col) &
|
||||||
|
dfs(grid1, grid2, row - 1, col) &
|
||||||
|
dfs(grid1, grid2, row, col + 1) &
|
||||||
|
dfs(grid1, grid2, row, col - 1);
|
||||||
|
}
|
||||||
|
}
|
54
src/main/java/com/dota/gridGraph/_2684/Solution.java
Normal file
54
src/main/java/com/dota/gridGraph/_2684/Solution.java
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
package com.dota.gridGraph._2684;
|
||||||
|
|
||||||
|
class Solution {
|
||||||
|
int[][] grid;
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
new Solution().maxMoves(new int[][]{ {3, 2, 4}, {2, 1, 9}, {1, 1, 7} });
|
||||||
|
}
|
||||||
|
public int maxMoves(int[][] grid) {
|
||||||
|
this.grid = grid;
|
||||||
|
int n = grid.length;
|
||||||
|
int m = grid[0].length;
|
||||||
|
var dp = new int[n][m];
|
||||||
|
int max = 0;
|
||||||
|
for (int i = 0; i < n; i++) {
|
||||||
|
if (get(i - 1, 0) < grid[i][1] || grid[i][0] < grid[i][1] || get(i + 1, 0) < grid[i][1]) {
|
||||||
|
dp[i][1] = 1;
|
||||||
|
max = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int j = 2; j < m; j++) {
|
||||||
|
for (int i = 0; i < n; i++) {
|
||||||
|
if (grid[i][j - 1] < grid[i][j] && dp[i][j - 1] > 0) {
|
||||||
|
dp[i][j] = Math.max(dp[i][j], dp[i][j - 1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (get(i + 1, j - 1) < grid[i][j] && dp[i + 1][j - 1] > 0) {
|
||||||
|
dp[i][j] = Math.max(dp[i][j], dp[i + 1][j - 1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (get(i - 1, j - 1) < grid[i][j] && dp[i - 1][j - 1] > 0) {
|
||||||
|
dp[i][j] = Math.max(dp[i][j], dp[i - 1][j - 1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dp[i][j] > 0) {
|
||||||
|
dp[i][j]++;
|
||||||
|
}
|
||||||
|
max = Math.max(dp[i][j], max);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return max;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int get(int i, int j) {
|
||||||
|
if (i < 0 || j < 0 || i >= grid.length || j >= grid[0].length) {
|
||||||
|
return Integer.MAX_VALUE;
|
||||||
|
}
|
||||||
|
return grid[i][j];
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user