Leetcode--695. 岛屿的最大面积
发布日期:2021-04-30 21:03:32 浏览次数:100 分类:精选文章

本文共 1363 字,大约阅读时间需要 4 分钟。

寻找二维数组中的最大岛屿面积问题可以通过深度优先搜索(DFS)解决。以下是问题的详细分析和解决方案:

问题分析

给定一个包含0和1的非空二维数组grid,一个岛屿由四个方向(水平或垂直)的1组成。矩阵的四个边缘都被水包围。任务是找到最大的岛屿面积。

方法思路

  • 问题分析:岛屿是由1组成的连通区域。四个边缘都被水包围意味着,岛屿只能在矩阵内部,周围都是0。
  • 算法选择:使用DFS遍历每个1,计算其所在岛屿的面积。每次遇到1时,开始DFS,将四个方向的1标记为0,并计数总数。
  • 优化技巧:在访问过的1处标记为0,避免重复计算,节省空间和时间。
  • 解决代码

    class Solution {    public int maxAreaOfIsland(int[][] grid) {        if (grid.length == 0) {            return 0;        }        int maxArea = 0;        int rows = grid.length;        int cols = grid[0].length;                for (int i = 0; i < rows; i++) {            for (int j = 0; j < cols; j++) {                if (grid[i][j] == 1) {                    maxArea = Math.max(maxArea, dfs(grid, i, j));                }            }        }        return maxArea;    }        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 area = 1;        area += dfs(grid, row - 1, col);        area += dfs(grid, row + 1, col);        area += dfs(grid, row, col - 1);        area += dfs(grid, row, col + 1);        return area;    }}

    代码解释

  • 初始化检查:如果grid为空,返回0。
  • 遍历矩阵:双重循环遍历每个单元格,当遇到1时,调用DFS。
  • DFS函数:检查边界条件,如果越界或是0,返回0。将当前单元格标记为0,递归四个方向,累加面积。
  • 计算最大面积:每次DFS返回面积,比较并更新最大值,最后返回最大面积。
  • 这种方法确保了每个1只被访问一次,时间复杂度为O(n*m),适用于矩阵大小不超过50x50的情况。

    上一篇:带你全面解析Android框架体系架构view篇,附答案
    下一篇:NIO-NIO的概述及应用(三)

    发表评论

    最新留言

    第一次来,支持一个
    [***.219.124.196]2026年05月29日 11时49分11秒