给定 n, m, 分别代表一个二维矩阵的行数和列数, 并给定一个大小为 k 的二元数组A. 初始二维矩阵全0. 二元数组A内的k个元素代表k次操作, 设第i个元素为 (A[i].x, A[i].y), 表示把二维矩阵中下标为A[i].x行A[i].y列的元素由海洋变为岛屿. 问在每次操作之后, 二维矩阵中岛屿的数量. 你需要返回一个大小为k的数组.
- 设定0表示海洋, 1代表岛屿, 并且上下左右相邻的1为同一个岛屿.
样例 1:
输入: n = 4, m = 5, A = [[1,1],[0,1],[3,3],[3,4]]
输出: [1,1,2,2]
解释:
0. 00000
00000
00000
00000
1. 00000
01000
00000
00000
2. 01000
01000
00000
00000
3. 01000
01000
00000
00010
4. 01000
01000
00000
00011
样例 2:
输入: n = 3, m = 3, A = [[0,0],[0,1],[2,2],[2,1]]
输出: [1,1,2,2]
方法一:暴力做法
- 每次操作后做一遍bfs
- 枚举之前未访问过的岛屿,岛屿数量加一
- 压入队列中开始bfs
- 从bfs的队列中取出队首,上下左右四个方向扩展那些没有访问过的岛屿,扩展之后压入队列中
- 重复执行第四步,一直到队列为空

这篇博客讨论了如何解决二维矩阵中岛屿数量的问题,特别是在每次将海洋变为岛屿后更新总数。介绍了两种方法:暴力遍历和并查集。暴力方法通过BFS遍历所有岛屿,而并查集方法利用集合的代表元合并相邻的岛屿,具有更优的时间复杂度。文章详细解释了并查集的实现和复杂度分析。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



