publicintmaxAreaOfIsland(int[][] grid) { intm= grid.length, n = grid[0].length;
intmaxArea=0; for (inti=0; i < m; i++) { for (intj=0; j < n; j++) { if (grid[i][j] == 1) { intarea= dfs(grid, m, n, i, j); maxArea = Math.max(maxArea, area); } } }
return maxArea; }
privateintdfs(int[][] grid, int m, int n, int i, int j) { intarea=1; grid[i][j] = 0; for (int[] direction : DIRECTIONS) { intnextI= i + direction[0]; intnextJ= j + direction[1]; if (nextI >= 0 && nextI < m && nextJ >= 0 && nextJ < n && grid[nextI][nextJ] == 1) { area += dfs(grid, m, n, nextI, nextJ); } }
intm= grid.length, n = grid[0].length; for (inti=0; i < m; i++) { for (intj=0; j < n; j++) { if (grid[i][j] == 1) { intarea= bfsMark(grid, i, j); maxArea = Math.max(maxArea, area); } } }
return maxArea; }
privateintbfsMark(int[][] grid, int i, int j) { intm= grid.length, n = grid[0].length; intarea=0;
Queue<int[]> queue = newLinkedList<>(); grid[i][j] = 0; queue.offer(newint[]{i, j}); while (!queue.isEmpty()) { area += queue.size(); for (intk= queue.size(); k > 0; k--) { int[] cell = queue.poll(); for (int[] direction : DIRECTIONS) { intnextI= cell[0] + direction[0], nextJ = cell[1] + direction[1]; if (nextI >= 0 && nextI < m && nextJ >= 0 && nextJ < n && grid[nextI][nextJ] == 1) { grid[nextI][nextJ] = 0; queue.offer(newint[]{nextI, nextJ}); } } } }