力扣 695. 岛屿的最大面积

题目描述:

给你一个大小为 m x n 的二进制矩阵 grid 。
岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。
岛屿的面积是岛上值为 1 的单元格的数目。
计算并返回 grid 中最大的岛屿面积。如果没有岛屿,则返回面积为 0 。

解析:

深度优先遍历(dfs)
1.比甲板上的战舰的问题多个改动
2.辅助函数返回的该岛屿的面积大小
3.需求岛屿的最大面积,所以需要用count记录每个岛屿的大小,用result每次和count去比较,然后记录最大岛屿面积

Java:

public int maxAreaOfIsland(int[][] grid) {
        int result = 0;
        for(int row = 0; row < grid.length; row++) {
            for(int col = 0; col < grid[0].length; col++) {
                if(grid[row][col] == 1) {
                    int count = dfs(grid, row, col);
                    result = Math.max(result, count);
                }
            }
        }
        return result;
    }
    public int dfs(int[][] grid, int row, int col) {
        if(row < 0 || row >= grid.length || col < 0 || col >= grid[0].length
        || grid[row][col] != 1) {
            return 0;
        }
        int count = 1;
        grid[row][col] = 0;
        count += dfs(grid, row - 1, col);
        count += dfs(grid, row + 1, col);
        count += dfs(grid, row, col - 1);
        count += dfs(grid, row, col + 1);
        return count;
    }

JavaScript:

var maxAreaOfIsland = function(grid) {
    let result = 0;
    for(let row = 0; row < grid.length; row++) {
        for(let col = 0; col < grid[0].length; col++) {
            if(grid[row][col] === 1) {
                const count = dfs(row, col);
                result = Math.max(result, count);
            }
        }
    }
    function dfs(row, col) {
        if(row < 0 || row >= grid.length || col < 0 || col >= grid[0].length
        || grid[row][col] !== 1) {
            return 0;
        }
        grid[row][col] = 0;
        let count = 1;
        count += dfs(row - 1, col);
        count += dfs(row + 1, col);
        count += dfs(row, col - 1);
        count += dfs(row, col + 1);
        return count;
    }
    return result;
};
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务