From 9a3f0b4ac19996e9e654111126b85dfcd4114e8f Mon Sep 17 00:00:00 2001 From: kkunkka Date: Fri, 11 Jul 2025 10:15:20 +0800 Subject: [PATCH] kk --- .../com/dota/gridGraph/_1905/Solution.java | 24 +++++++++ .../com/dota/gridGraph/_2684/Solution.java | 54 +++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 src/main/java/com/dota/gridGraph/_1905/Solution.java create mode 100644 src/main/java/com/dota/gridGraph/_2684/Solution.java diff --git a/src/main/java/com/dota/gridGraph/_1905/Solution.java b/src/main/java/com/dota/gridGraph/_1905/Solution.java new file mode 100644 index 0000000..933dc8e --- /dev/null +++ b/src/main/java/com/dota/gridGraph/_1905/Solution.java @@ -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); + } +} \ No newline at end of file diff --git a/src/main/java/com/dota/gridGraph/_2684/Solution.java b/src/main/java/com/dota/gridGraph/_2684/Solution.java new file mode 100644 index 0000000..5688d08 --- /dev/null +++ b/src/main/java/com/dota/gridGraph/_2684/Solution.java @@ -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]; + } +}