岛屿的最大面积

àì夳堔傛蜴生んèń 2022-01-21 08:51 321阅读 0赞

1、题目描述

给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合。你可以假设二维矩阵的四个边缘都被水包围着。

找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为0。)

示例 1:

  1. [[0,0,1,0,0,0,0,1,0,0,0,0,0],
  2. [0,0,0,0,0,0,0,1,1,1,0,0,0],
  3. [0,1,1,0,1,0,0,0,0,0,0,0,0],
  4. [0,1,0,0,1,1,0,0,1,0,1,0,0],
  5. [0,1,0,0,1,1,0,0,1,1,1,0,0],
  6. [0,0,0,0,0,0,0,0,0,0,1,0,0],
  7. [0,0,0,0,0,0,0,1,1,1,0,0,0],
  8. [0,0,0,0,0,0,0,1,1,0,0,0,0]]
  9. 对于上面这个给定矩阵应返回 6。注意答案不应该是11,因为岛屿只能包含水平或垂直的四个方向的‘1’。

示例 2:

  1. [[0,0,0,0,0,0,0,0]]
  2. 对于上面这个给定的矩阵, 返回 0

注意: 给定的矩阵grid 的长度和宽度都不超过 50。

2、解法

2.1 DFS(深度优先遍历)

  1. int m ;
  2. int n ;
  3. int[][] around = { { 0,1},{ 1,0},{ 0,-1},{ -1,0}};
  4. public int maxAreaOfIsland(int[][] grid) {
  5. m = grid.length;
  6. n = grid[0].length;
  7. int maxArea=0;
  8. for(int i=0;i<m;i++) {
  9. for(int j=0;j<n;j++) {
  10. maxArea = Math.max(maxArea, dfs(grid, i,j));
  11. }
  12. }
  13. return maxArea;
  14. }
  15. /** * 深度遍历,计算某点的周围为1的节点的数量 * @param grid * @param i * @param j * @return */
  16. private int dfs(int[][]grid, int i, int j) {
  17. if(i<0|| i>=m || j<0||j>=n || grid[i][j] ==0) {
  18. return 0;
  19. }
  20. int area =1;
  21. grid[i][j]=0;
  22. for(int[] arr:around) {
  23. area +=dfs(grid, i+arr[0], j+arr[1]);
  24. }
  25. return area;
  26. }

发表评论

表情:
评论列表 (有 0 条评论,321人围观)

还没有评论,来说两句吧...

相关阅读

    相关 695. 岛屿面积

    > 给定一个包含了一些 0 和 1 的非空二维数组 grid 。 > > 一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者

    相关 695. 岛屿面积

    给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合。你可以假设二维矩阵的四个边缘都被水包围着