1905. 统计子岛屿数量

💡 原文英文,约700词,阅读约需3分钟。
📝

内容提要

给定两个二进制矩阵grid1和grid2,表示陆地和水域,判断grid2中的岛屿是否是grid1中岛屿的子岛屿。使用DFS遍历grid2中的岛屿,检查对应的grid1中的岛屿是否都是陆地。返回满足子岛屿条件的岛屿数量。

🔎

延伸解读

子岛屿的定义与判定逻辑

子岛屿要求 grid2 中的整个岛屿必须完全位于 grid1 的某个岛屿内部。这意味着 grid2 岛屿的每一个陆地单元格在 grid1 中对应位置也必须是陆地。如果存在任何一个单元格在 grid1 中是水,则该岛屿不是子岛屿。这种定义确保了子岛屿在空间上被 grid1 的岛屿完全包含。

DFS 遍历与实时检查

算法使用深度优先搜索遍历 grid2 中的每个岛屿,并在遍历过程中同步检查 grid1 对应位置是否为陆地。一旦发现某个单元格在 grid1 中是水,就标记该岛屿不是子岛屿。DFS 同时将 grid2 中的陆地标记为已访问(例如置为0),避免重复计数。这种方法在遍历过程中直接完成判定,无需额外存储。

复杂度与适用规模

由于每个单元格最多被访问一次,算法的时间复杂度为 O(m × n),其中 m 和 n 分别是矩阵的行数和列数。空间复杂度主要取决于递归深度,最坏情况下为 O(m × n)。对于题目给定的最大规模 500×500,该算法能够高效运行,不会超时。

❓

Q&A

如何判断grid2中的岛屿是否是grid1中的子岛屿?

通过深度优先搜索(DFS)遍历grid2中的岛屿,检查对应的grid1中的单元格是否都是陆地。只有当grid1中包含grid2岛屿的所有单元格时,grid2的岛屿才被视为子岛屿。

在这个算法中,时间复杂度是多少?

时间复杂度为O(m × n),其中m为行数,n为列数。

如何实现对grid2的遍历以识别岛屿?

遍历grid2中的每个单元格,当遇到陆地单元格(1)时,使用DFS探索整个岛屿。

什么是子岛屿?

子岛屿是指grid2中的岛屿,如果grid1中有一个岛屿包含grid2中该岛屿的所有单元格,则该岛屿被视为子岛屿。

DFS在这个算法中是如何使用的?

DFS用于探索grid2中的岛屿,并在探索过程中检查对应的grid1中的单元格是否都是陆地。

如何计算grid2中满足子岛屿条件的岛屿数量?

每找到一个满足子岛屿条件的岛屿,就将计数加一,最终返回计数结果。

➡️

继续阅读