算法训练营day53 | {101.孤岛的总面积, 102.沉没孤岛, 103.水流问题, 104.建造最大岛屿}
第11章图论-part03,继续用深搜/广搜解决岛屿问题,优化思路很妙。
101. 孤岛的总面积
- 题目链接:101.孤岛的总面积
- 文档讲解:代码随想录
- 视频讲解:图论:岛屿问题再出新花样 | 深搜优先搜索 | 卡码网:101.孤岛总面积
- 状态:孤岛是那些位于矩阵内部、所有单元格都不接触边缘的岛屿。比较简单。
1.1 解题小结
题解的做法比我更好,它把和矩阵边缘有接触的陆地全部置为0,重新遍历一遍grid矩阵,剩余1的个数就是孤岛的总面积。
本题不需要定义visited数组。
▶
101.孤岛的总面积1 | |
102. 沉没孤岛
- 题目链接:102.沉没孤岛
- 文档讲解:代码随想录
- 视频讲解:图论:岛屿问题也需要逆向思考 | 深搜优先搜索DFS | 卡码网:102.沉没孤岛
- 状态:本题和上一题很类似,对矩阵边缘的陆地染色,例如置为2。
2.1 解题小结
▶
102.沉没孤岛1 | |
103. 水流问题
- 题目链接:103.水流问题
- 文档讲解:代码随想录
- 视频讲解:图论:水流向何方? | 深搜优先搜索DFS| 广度优先搜索BFS | 卡码网:103.水流问题
- 状态:很妙的优化思路,相比于对每个节点使用一次时间复杂度为O(nm)的搜索算法,总时间复杂度O(nmnm)。
3.1 解题分析

图中的蓝色方块上的雨水既能流向第一组边界,也能流向第二组边界。所以最终答案为所有蓝色方块的坐标。
3.2 解题小结
▶
103.水流问题1 | |
104. 建造最大岛屿
- 题目链接:104.建造最大岛屿
- 文档讲解:代码随想录
- 视频讲解:图论:岛屿问题上难度了! |深搜优先搜索DFS | 广度优先搜索BFS | 卡码网:104.建造最大岛屿
- 状态:也需要对岛屿染色,难点在主函数的书写上。
4.1 解题分析
本题的一个暴力想法,应该是遍历地图尝试 将每一个 0 改成1,然后去搜索地图中的最大的岛屿面积。但这个时间复杂度同样是O(n^4)级别的,优化思路是什么?
只要用一次深搜把每个岛屿的面积记录下来就好。
第一步:一次遍历地图,得出各个岛屿的面积,并做编号记录。可以使用map记录,key为岛屿编号,value为岛屿面积
第二步:再遍历地图,遍历0的方格(因为要将0变成1),并统计该1(由0变成的1)周边岛屿面积,将其相邻面积相加在一起,遍历所有 0 之后,就可以得出 选一个0变成1 之后的最大面积。
4.2 解题小结
注意在统计相邻的陆地面积时,用过一次的陆地要标记一下,避免重复统计面积。这里我用的是Set集合记录对应的mark。
▶
104.建造最大岛屿1 | |
4. 今日收获
- 学习时长:4小时
算法训练营day53 | {101.孤岛的总面积, 102.沉没孤岛, 103.水流问题, 104.建造最大岛屿}
http://paopaotangzu.xyz/cn/day53_leetcode/