剑指 Offer II 105. 岛屿的最大面积

  1. 这里采用沉岛思维,就是经过的岛就将其修改为 0,注意和回溯算法区分开(回溯算法需要复原现场,而这里是不需要的)。因为连通的岛屿必须只属于某一部分。 ```java class Solution { public int maxAreaOfIsland(int[][] grid) {

    1. if (grid == null) return 0;
    2. int row = grid.length, col = grid[0].length;
    3. int maxArea = Integer.MIN_VALUE;
    4. for (int i = 0; i < row; i++) {
    5. for (int j = 0; j < col; j++) {
    6. if (grid[i][j] == 1) {
    7. maxArea = Math.max(maxArea, dfs(grid, i, j));
    8. }
    9. }
    10. }
    11. return maxArea == Integer.MIN_VALUE ? 0 : maxArea;

    }

    // 以 (row, col) 向四周扩散求最大面积 private int dfs(int[][] grid, int row, int col) {

     // 边界判断
     if (row < 0 || row >= grid.length || col < 0 || col >= grid[0].length || grid[row][col] == 0) {
         return 0;
     }
    
     // 判断位置是否经过
     grid[row][col] = 0;
    
     int a = dfs(grid, row - 1, col); // 上
     int b = dfs(grid, row + 1, col); // 下
     int c = dfs(grid, row, col - 1); // 左
     int d = dfs(grid, row, col + 1); // 右
    
     // grid[row][col] = 1;
    
     return a + b + c + d  + 1;
    

    }

} ```