695. 岛屿的最大面积

题目要求以及示例:

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

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

示例 1:

[[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]]
对于上面这个给定矩阵应返回 6。注意答案不应该是11,因为岛屿只能包含水平或垂直的四个方向的‘1’。

示例 2:

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/max-area-of-island
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 

思路:肯定要遍历整个二维数组,可以通过递归每个元素,获得相连的岛屿面积,即分别向东南西北四个方向递归。需要注意的是,访问后的元素如何处理:将其置为0,以减少下次再次访问,增加时间消耗。我的本身基础薄弱一点,对于vector容器二维数组思路储备不足,我只想到了访问后flag置为true。还需要多加练习啊。

class Solution {
public:
    int maxAreaOfIsland(vector<vector<int>>& grid) 
      {
        int ans=0;
        int area=0;
        for(int i=0;i<grid.size();i++)  //横坐标
        {
            for(int j=0;j<grid[0].size();j++)   //纵坐标
            {
                if(grid[i][j])
                {
                    area=getarea(grid,i,j);
                    
                    if(area>ans)
                    ans=area;
                }
            }
        }
        return ans;
    }
    int getarea(vector<vector<int>>& grid,int i,int j) 
{
        if(i<grid.size()&&j<grid[0].size()&&i>-1&&j>-1&&grid[i][j])
        {
        grid[i][j]=0;
        return (1+getarea(grid,i,j-1)+getarea(grid,i,j+1)+getarea(grid,i-1,j)+getarea(grid,i+1,j));
        }
        else
        return 0;
}

};

注:这里还有一个小问题,在getarea中if条件判断时,grid[i][j]不能被放到前面,因为放到前面的话,没了约束条件,就可能会出现数组越界的情况。这也是我提交时出现的问题,参考了同类问题才发现的,也积累一下。同类问题的链接:

https://blog.csdn.net/ideaddxxpp/article/details/89574531

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值