【力扣】695岛屿的最大面积
目录
一、题目
二、代码解析
1、BFS解法
2、DFS解法
三、解题思路(典型岛屿问题)
1、容易疏漏的点
2、尝试了一下并查集
一、题目
给你一个大小为 m x n 的二进制矩阵 grid 。
岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。
岛屿的面积是岛上值为 1 的单元格的数目。
计算并返回 grid 中最大的岛屿面积。如果没有岛屿,则返回面积为 0 。
m == grid.length
n == grid[i].length
1 <= m, n <= 50
grid[i][j]
为0
或1
二、代码解析
1、BFS解法
class Solution:def maxAreaOfIsland(self, grid: List[List[int]]) -> int:row = len(grid)cow = len(grid[0])queue = []realmax = 0res = 0for i in range(row):for j in range(cow): #两个for循环将所有的格子都遍历一遍if grid[i][j] == 1: #找到为1的格子就广度优先遍历找到相联的1queue.append((i,j)) #加入到列表中grid[i][j] = 0 #进入了就说明他走过,应该改为0避免死循环res = 1 #进入了也得从1开始对这一整块的1计数while len(queue) > 0: #BFSnr,nc = queue.pop() #把队首pop出去,再找队首的下一级for x,y in [(nr,nc-1),(nr,nc+1),(nr-1,nc),(nr+1,nc)]: #根据上下左右查找是否为1if 0<= x < row and 0 <= y< cow and grid[x][y] == 1: #注意限制边界queue.append((x,y)) #把所有队首下一级的元组都加入grid[x][y] = 0 #走过的路设置为0res += 1 #找到一个加一个realmax = max(realmax,res) #通过寻找最大值来判断对最面积return realmax
2、DFS解法
class Solution:def maxAreaOfIsland(self, grid: List[List[int]]) -> int:row = len(grid)cow = len(grid[0])stack = []res = 0realmax = 0for p in range(row):for q in range(cow):if grid[p][q] == 1:res = 1stack.append((p,q))grid[p][q] = 0while len(stack) > 0:nr,nc = stack.pop(-1)for x,y in [(nr-1,nc),(nr+1,nc),(nr,nc+1),(nr,nc-1)]:if 0 <= x < row and 0 <= y < cow and grid[x][y] == 1:res += 1stack.append((x,y))grid[x][y] = 0nr = xnc = yrealmax = max(res,realmax)return realmax
三、解题思路(典型岛屿问题)
1、容易疏漏的点
1.1BFS
- 找到第一个1就要加入到queue中,且把这个走过的地方设为0,且开始计数
- 在while循环中,找到相邻的1也要加入到queue中,且走过的地方设为0,计数
- res 和 realmax要提前先赋值
1.2 DFS
- 找到第一个1就要加入到stack中,且把这个走过的地方设为0,且开始计数
- 在while循环中,找到相邻的1也要加入到stack中,且走过的地方设为0,计数
- res 和 realmax要提前先赋值
- for循环附近的1中坚持一条路走到黑,利用当前的x和y去使得下一步去找(x,y)相邻格子,一直改变nr,nc的值直到所有格子被走完
2、尝试了一下并查集
并查集更时候查有多少个小岛(全面的概况出现小岛数量)
BFS、DFS更适合找小岛里面的最大面积(精细到局部上)
【力扣】695岛屿的最大面积相关推荐
- 岛屿类-网格类问题-DFS | 力扣695. 岛屿的最大面积
思路参考上文: 岛屿类-网格类问题-DFS | 力扣200. 岛屿数量 本文讲解695. 岛屿的最大面积问题,属于常见的岛屿类-网格类问题 本题使用DFS的思想 题目 给定一个包含了一些 0 和 1 ...
- 力扣 695. 岛屿的最大面积
一.题目描述 给你一个大小为 m x n 的二进制矩阵 grid. 岛屿是由一些相邻的 1(代表土地)构成的组合,这里的相邻要求两个 1 必须在水平或者竖直的四个方向上相邻.你可以假设 grid 的四 ...
- 力扣(Leetcode)695. 岛屿的最大面积(Java)带注释
leetcode刷题695. 岛屿的最大面积 1.题目描述 2.解法 1.DFS(深度优先搜索) 2.DFS + 栈 1.题目描述 给你一个大小为 m x n 的二进制矩阵 grid . 岛屿 是由一 ...
- 岛屿问题 通用解-463.岛屿周长-200.岛屿数量-695.岛屿的最大面积-827.最大人工岛
文章目录 岛屿问题 如何在网格上做DFS(通用解) 463.岛屿的周长 题目 题解 -通用模板 题解2 200.岛屿数量 题目 题解 695.岛屿的最大面积 题目 题解 827.最大人工岛 题目 题解 ...
- 每日一道leetcode(python)695. 岛屿的最大面积
每日一道leetcode(python)695. 岛屿的最大面积 2021-08-21 给定一个包含了一些 0 和 1 的非空二维数组 grid .一个 岛屿 是由一些相邻的 1 (代表土地) 构成的 ...
- LeetCode 695. 岛屿的最大面积【c++/java详细题解】
目录 1.题目 2.思路 3.c++代码 4.java代码 1.题目 给定一个包含了一些 0 和 1 的非空二维数组 grid . 一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相 ...
- LeetCode 695.岛屿的最大面积
LeetCode 695.岛屿的最大面积 给你一个大小为 m x n 的二进制矩阵 grid . 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的 ...
- 695.岛屿的最大面积
给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合.你可以假设二维矩阵的四个边缘都被水包围着. 找到给定的二维数组中 ...
- LeetCode 695. 岛屿的最大面积(图的BFS/DFS)
文章目录 1. 题目 2. 解题 2.1 BFS广度优先搜索 2.2 DFS深度优先搜索 1. 题目 给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直 ...
- 695. 岛屿的最大面积(适合 初学者 理解的java版BFS)
文章目录 BFS 给你一个大小为 m x n 的二进制矩阵 grid . 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻.你可以 ...
最新文章
- DymSLAM: 基于几何和运动分割的4D动态场景重建( RAL)
- 53.C#--多线程
- 2072. Kirill the Gardener 3
- 【Android】OpenGL ES for Android 教程1 - HelloWorld
- Ubuntu 12.10 安装 JDK1.7.0_15
- centos7下别名(alias)的特殊用法
- gtk linux 升级_Linux包系列的知识(附:Ubuntu16.04升级到18.04的案例)
- 浅谈Linux协议和组成
- python卸载错误_卸载python后导致yum无法使用的解决办法 - Python - 服务器之家
- 简单的maven自定义webapp目录
- ZZULIOJ1041-1045Python解法
- ubuntu计算机名用户名,修改ubuntu的用户名(注意用户名和主机名的区别)
- Maya:解决丢失的贴图和引用
- 百度App性能优化工具篇 - Thor原理及实践
- 把图片放大后还很清晰的办法
- 【全套资料.zip下载】数电课设-走廊声光控延时节能灯电路设计【Multisim仿真+报告+讲解视频.zip下载】
- 神经网络研究主要内容,神经网络的起源和发展
- Mr.Fang出品:银企互联(NC模式)开发者版本(.NET WebService中间件,Java、PHP、Python等跨语言测试通过)
- 第十二篇:从生稣出熟稣,从熟稣出醍醐-再读内核驱动设计目标
- camtasia studio2022电脑屏幕录像录屏剪辑