695. 岛屿的最大面积

给你一个大小为 m x n 的二进制矩阵 grid 。

岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。

岛屿的面积是岛上值为 1 的单元格的数目。

计算并返回 grid 中最大的岛屿面积。如果没有岛屿,则返回面积为 0 。

示例 1

输入:grid = [[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

输入:grid = [[0,0,0,0,0,0,0,0]]

输出:0

思路:

看到岛屿问题就觉得挺亲切的。因为岛屿问题似乎都可以用一个思路解决:找到陆地后,按照深度优先搜索的方式,一直根据它向外扩展,扩展到的地方我们就将这个陆地变成海洋。这样一来,每个岛屿我们都可以在计算出面积的同时让它从地图上“消失”,避免二次计算。

具体思路就是:我们遍历整个二维数组的每一个地方,如果是海洋就跳过,如果是陆地,就送入我们的递归函数——任何陆地,只要送入我们的递归函数,这块陆地所连通的整个岛屿都会被我们变成海洋和处理。

代码:

class Solution(object):def maxAreaOfIsland(self, grid):n = len(grid)#行数m = len(grid[0])#列数def dfs(i,j,grid):#传入当前位置和地图# global area #声明 这里的res是之前定义的全局变量if i<0 or i >=n or j<0 or j>=m:#如果当前位置越界了returnif grid[i][j]==1: #如果当前位置是岛屿area[0]+=1#area代表面积,+1grid[i][j]=0#这个面积已经加过了,置为0dfs(i-1,j,grid)#把上下左右送去递归dfs(i+1,j,grid)#写这四步不需要考虑是否越界dfs(i,j-1,grid)#因为进入dfs后会再判断dfs(i,j+1,grid)max_iland=0#岛屿最大面积area = [0]#area[0]用来临时存储每个岛屿的面积#正式开始for i in range(n):for j in range(m):#两层循环,遍历每一个格子if grid[i][j]==1:#如果遍历到了陆地area[0] = 0#先将它置为0dfs(i,j,grid)#对这一小块陆地进行扩展#扩展结束,此时area面积就是那个岛屿的面积#进行岛屿最大面积的更新max_iland = max(area[0],max_iland)#返回最终的岛屿最大面积return max_iland

小结:

代码中area用列表的形式存储,之前说过了算是一个小技巧,因为它可以起到全局变量的作用。如果简单定义成值的话,LeetCode编译器会因找不到变量声明而报错,用列表存储就可以了。

LeetCode岛屿最大面积相关推荐

  1. Leetcode岛屿问题系列分析

    在 LeetCode 中,「岛屿问题」是一个系列系列问题,比如: 200. 岛屿数量 (Medium) 463. 岛屿的周长 (Easy) 695. 岛屿的最大面积 (Medium) 827. 最大人 ...

  2. Leetcode岛屿问题

    岛屿个数问题 1 是陆地, 0 是水, 只考虑上下左右四个方向相邻 例如: 输入: 11110 11010 11000 00000 输出: 1 思路: 遍历二维数组, 如果是 1, 就把它上下左右都感 ...

  3. DFS求岛屿最大面积

    求岛屿最大面积 题目 源代码 结果 解释 题目 给定一个包含了一些0和1的非空二维数组,一个岛屿是由一些相邻的1(代表土地)构成的组合,这里的「相邻」要求两个1必须在水平或者竖直方向上相邻.找到给定的 ...

  4. LeetCode——223. 矩形面积(Rectangle Area)[中等]——分析及代码(C++)

    LeetCode--223. 矩形面积[Rectangle Area][中等]--分析及代码[C++] 一.题目 二.分析及代码 1. 几何计算 (1)思路 (2)代码 (3)结果 三.其他 一.题目 ...

  5. 岛屿问题和昆虫越障问题以及岛屿最大面积

    岛屿问题 题目地址:https://leetcode-cn.com/problems/number-of-islands/submissions/ package A.giao;public clas ...

  6. 【算法题目】【DFS】岛屿数量 岛屿中面积最大值

    1岛屿数量 题目很好理解,dfs来一套即可: (1)二维的,没考虑特殊情况: (2)对每个网格dfs,每次dfs往上下左右搜 (3)grid是list,在python里面会是一个全局,第一次搜到记一次 ...

  7. LeetCode岛屿的最大面积

    剑指 Offer II 105. 岛屿的最大面积 给定一个由 0 和 1 组成的非空二维数组 grid ,用来表示海洋岛屿地图. 一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻 ...

  8. 岛屿最大面积 leetcode Java_LeetCode刷题记录——岛屿的最大面积

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

  9. 岛屿最大面积 leetcode Java_LeetCode:岛屿的最大面积

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

最新文章

  1. WMI技术介绍和应用——接收事件
  2. C++builder XE 安装控件 及输出路径
  3. 测试用例设计之正交表法详解
  4. Caffe---Pycaffe 绘制loss和accuracy曲线
  5. python docker自动化_自动化 – 自动创建docker容器并启动python脚本
  6. 数据库中触发器、事务
  7. cocos2d-x游戏实例(17)-纵版射击游戏(4)
  8. 洛谷——P1031 均分纸牌
  9. 为什么8位数据范围是-128到127,而不是-127到128?
  10. apache代理IIS的80端口实现共存
  11. 深度学习在文本领域的应用
  12. asp.net接受表单验证格式后再提交数据_看滴普科技大前端如何玩转el-form-renderer 表单渲染器1.14.0
  13. linux 启动启动服务_更快地启动Linux
  14. Delphi开发中增删改查操作以及存储过程的调用方式
  15. 开源web应用防火墙 - Naxsi
  16. matlab rgb2ntsc函数,matlab 颜色模型之间的转换
  17. Linux 吉祥物30岁了!“出道”30年,你对Linux了解多少?
  18. Four-tuples 山东省赛F题
  19. 多个微服务的接口依赖如何测试_一文看懂微服务
  20. windows系统服务优化终结者_邮件服务器如何从Windows系统切换到Linux系统

热门文章

  1. 高德地图发布全国美食地图:火锅最受欢迎
  2. 线程同步类实现【国际化翻译案例+机场安检案例】
  3. 二进制压缩 - 算法
  4. 新的nivida显卡安装时候出现unknown chipset
  5. 《嵌入式 – GD32开发实战指南》第2章 初识GPIO流水灯
  6. Java 后端将上传的 csv 文件转为 Excel xlsx 文件
  7. k2677场效应管参数引脚_常用场效MOS应管参数大全-电压参数表图文
  8. 账套显示到期怎么弄_用友U8账套年度演示期限已到期
  9. Halcon膨胀腐蚀
  10. 关于HC-SR501人体红外感应模块的光敏电阻取值到底为多少的终极研究