Leetcode 695. 岛屿的最大面积

问题描述

给定一个包含了一些0和1的非空二维数组 g r i d grid grid,一个岛屿是由四个方向(水平或垂直)的1(代表土地)构成的组合。你可以假设二维矩阵的四个边缘都被水包围着。
找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为0。)
示 例 : 示例:
输 入 : 输入:

[[0,0,1,0,0,0,0,1,0,0,0,0,0],
 [0,0,0,0,0,0,0,1,1,1,0,0,0],
 [0,1,1,0,1,0,0,0,0,0,0,0,0],
 [0,1,0,0,1,1,0,0,1,0,1,0,0],
 [0,1,0,0,1,1,0,0,1,1,1,0,0],
 [0,0,0,0,0,0,0,0,0,0,1,0,0],
 [0,0,0,0,0,0,0,1,1,1,0,0,0],
 [0,0,0,0,0,0,0,1,1,0,0,0,0]]

输 出 输出 :5

解题报告

  • 方法一:深度优先搜索
    从某个坐标 ( i , j ) (i,j) (i,j)出发,从四个方向进行扩展,看能数到多少个1,即为这个连通块的岛屿面积

实现代码

class Solution{
    public:
        int maxAreaOfIsland(vector<vector<int>> &grid){
            int ans=0;
            for(int i=0;i<grid.size();i++){
                for(int j=0;j<grid[0].size();j++){
                    if(grid[i][j]==1){
                        ans=max(ans, DFS(i,j,grid));
                    }
                }
            }
            return ans;
        }
        int DFS(int i, int j, vector<vector<int>> &grid){
            grid[i][j]=0;
            int dx[4]={0,0,-1,1},dy[4]={1,-1,0,0};
            int res=1;
            for(int index=0;index<4;index++){
                int ti=i+dx[index],tj=j+dy[index];
                if(ti>=0&&ti<grid.size()&&tj>=0&&tj<grid[0].size()
                			&&grid[ti][tj]){
                    res+=DFS(ti, tj, grid);
                }
            }
            return res;
        }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值