leetcode 695. Max Area of Island(岛屿的最大面积)

曾经终败给现在 2022-12-03 09:55 235阅读 0赞

https://leetcode.com/problems/max-area-of-island/

一、问题描述

给定一个二维数组,其所有元素均为1和0,分别代表陆地和水,数组边界四周都是水,求岛屿最大面积。

测试用例:

  1. Input
  2. [[0,0,1,0,0,0,0,1,0,0,0,0,0],
  3. [0,0,0,0,0,0,0,1,1,1,0,0,0],
  4. [0,1,1,0,1,0,0,0,0,0,0,0,0],
  5. [0,1,0,0,1,1,0,0,1,0,1,0,0],
  6. [0,1,0,0,1,1,0,0,1,1,1,0,0],
  7. [0,0,0,0,0,0,0,0,0,0,1,0,0],
  8. [0,0,0,0,0,0,0,1,1,1,0,0,0],
  9. [0,0,0,0,0,0,0,1,1,0,0,0,0]]
  10. Output
  11. 6
  12. Input
  13. [[0,0,0,0,0,0,0,0]]
  14. Output
  15. 0

二、代码实现

二层循环遍历数组,如果当前元素是1,则计算该岛屿的面积后返回,然后与当前最大面积相比(如果比当前最大面积大,则更新最大面积),并且将岛屿的1置为0;如果当前元素是0,直接continue跳过当前元素。

  1. class Solution {
  2. public int maxAreaOfIsland(int[][] grid) {
  3. if (grid == null || grid.length == 0) {
  4. return 0;
  5. }
  6. int maxArea = Integer.MIN_VALUE;
  7. for (int i=0; i<grid.length; i++) {
  8. for (int j=0; j<grid[0].length; j++) {
  9. if (grid[i][j] == 1) {
  10. int area = dfs(grid, i, j);
  11. maxArea = Math.max(maxArea, area);
  12. }
  13. }
  14. }
  15. return (maxArea == Integer.MIN_VALUE) ? 0 : maxArea; //如果还是最小负数,说明没有岛屿,所以岛屿的最大面积为0
  16. }
  17. private int dfs(int[][] grid, int i, int j) {
  18. if (i < 0 || i >= grid.length || j < 0 || j >= grid[0].length || grid[i][j] == 0) {
  19. return 0;
  20. }
  21. int area = 1;
  22. grid[i][j] = 0;
  23. area += dfs(grid, i-1, j); //上
  24. area += dfs(grid, i+1, j); //下
  25. area += dfs(grid, i, j-1); //左
  26. area += dfs(grid, i, j+1); //右
  27. return area;
  28. }
  29. }

发表评论

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

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

相关阅读