LeetCode岛屿最大面积
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岛屿最大面积相关推荐
- Leetcode岛屿问题系列分析
在 LeetCode 中,「岛屿问题」是一个系列系列问题,比如: 200. 岛屿数量 (Medium) 463. 岛屿的周长 (Easy) 695. 岛屿的最大面积 (Medium) 827. 最大人 ...
- Leetcode岛屿问题
岛屿个数问题 1 是陆地, 0 是水, 只考虑上下左右四个方向相邻 例如: 输入: 11110 11010 11000 00000 输出: 1 思路: 遍历二维数组, 如果是 1, 就把它上下左右都感 ...
- DFS求岛屿最大面积
求岛屿最大面积 题目 源代码 结果 解释 题目 给定一个包含了一些0和1的非空二维数组,一个岛屿是由一些相邻的1(代表土地)构成的组合,这里的「相邻」要求两个1必须在水平或者竖直方向上相邻.找到给定的 ...
- LeetCode——223. 矩形面积(Rectangle Area)[中等]——分析及代码(C++)
LeetCode--223. 矩形面积[Rectangle Area][中等]--分析及代码[C++] 一.题目 二.分析及代码 1. 几何计算 (1)思路 (2)代码 (3)结果 三.其他 一.题目 ...
- 岛屿问题和昆虫越障问题以及岛屿最大面积
岛屿问题 题目地址:https://leetcode-cn.com/problems/number-of-islands/submissions/ package A.giao;public clas ...
- 【算法题目】【DFS】岛屿数量 岛屿中面积最大值
1岛屿数量 题目很好理解,dfs来一套即可: (1)二维的,没考虑特殊情况: (2)对每个网格dfs,每次dfs往上下左右搜 (3)grid是list,在python里面会是一个全局,第一次搜到记一次 ...
- LeetCode岛屿的最大面积
剑指 Offer II 105. 岛屿的最大面积 给定一个由 0 和 1 组成的非空二维数组 grid ,用来表示海洋岛屿地图. 一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻 ...
- 岛屿最大面积 leetcode Java_LeetCode刷题记录——岛屿的最大面积
题目描述: 给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合.你可以假设二维矩阵的四个边缘都被水包围着. 找到给定 ...
- 岛屿最大面积 leetcode Java_LeetCode:岛屿的最大面积
岛屿的最大面积 题目叙述: 给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合.你可以假设二维矩阵的四个边缘都被水包 ...
最新文章
- WMI技术介绍和应用——接收事件
- C++builder XE 安装控件 及输出路径
- 测试用例设计之正交表法详解
- Caffe---Pycaffe 绘制loss和accuracy曲线
- python docker自动化_自动化 – 自动创建docker容器并启动python脚本
- 数据库中触发器、事务
- cocos2d-x游戏实例(17)-纵版射击游戏(4)
- 洛谷——P1031 均分纸牌
- 为什么8位数据范围是-128到127,而不是-127到128?
- apache代理IIS的80端口实现共存
- 深度学习在文本领域的应用
- asp.net接受表单验证格式后再提交数据_看滴普科技大前端如何玩转el-form-renderer 表单渲染器1.14.0
- linux 启动启动服务_更快地启动Linux
- Delphi开发中增删改查操作以及存储过程的调用方式
- 开源web应用防火墙 - Naxsi
- matlab rgb2ntsc函数,matlab 颜色模型之间的转换
- Linux 吉祥物30岁了!“出道”30年,你对Linux了解多少?
- Four-tuples 山东省赛F题
- 多个微服务的接口依赖如何测试_一文看懂微服务
- windows系统服务优化终结者_邮件服务器如何从Windows系统切换到Linux系统