发布时间:2026/8/10 3:24:19
LeetCode岛屿数量问题:DFS/BFS/并查集解法详解 1. 问题概述与核心思路LeetCode 200题岛屿数量是算法面试中的经典问题主要考察图的遍历和连通域分析能力。题目给定一个由1陆地和0水组成的二维网格要求计算其中岛屿的数量。岛屿被定义为水平或垂直方向上相邻的陆地组成的区域。这个问题的关键在于理解相邻的定义——只有上下左右四个方向的连接才算相邻对角线方向的连接不被考虑。例如在以下3x3网格中1 1 0 0 1 0 0 0 1存在两个岛屿左上角的3个1组成一个岛屿右下角的单个1是另一个岛屿。2. 解法分析与实现细节2.1 深度优先搜索(DFS)解法DFS是最直观的解决方法时间复杂度O(M×N)空间复杂度O(M×N)最坏情况下递归栈的深度def numIslands(grid): if not grid: return 0 count 0 rows, cols len(grid), len(grid[0]) def dfs(r, c): if r 0 or c 0 or r rows or c cols or grid[r][c] ! 1: return grid[r][c] 0 # 标记为已访问 dfs(r1, c) dfs(r-1, c) dfs(r, c1) dfs(r, c-1) for r in range(rows): for c in range(cols): if grid[r][c] 1: count 1 dfs(r, c) return count注意这里直接修改了输入网格如果不允许修改原数组需要额外使用visited矩阵记录访问状态。2.2 广度优先搜索(BFS)解法BFS使用队列实现同样时间复杂度O(M×N)空间复杂度O(min(M,N))from collections import deque def numIslands(grid): if not grid: return 0 count 0 rows, cols len(grid), len(grid[0]) for r in range(rows): for c in range(cols): if grid[r][c] 1: count 1 queue deque([(r, c)]) grid[r][c] 0 while queue: row, col queue.popleft() for dr, dc in [(-1,0),(1,0),(0,-1),(0,1)]: nr, nc row dr, col dc if 0 nr rows and 0 nc cols and grid[nr][nc] 1: queue.append((nr, nc)) grid[nr][nc] 0 return count2.3 并查集(Union-Find)解法并查集适合处理动态连通性问题时间复杂度O(M×N×α(M×N))其中α是反阿克曼函数class UnionFind: def __init__(self, grid): rows, cols len(grid), len(grid[0]) self.count 0 self.parent [i for i in range(rows * cols)] self.rank [0] * (rows * cols) for r in range(rows): for c in range(cols): if grid[r][c] 1: self.count 1 def find(self, i): if self.parent[i] ! i: self.parent[i] self.find(self.parent[i]) return self.parent[i] def union(self, x, y): rootx self.find(x) rooty self.find(y) if rootx ! rooty: if self.rank[rootx] self.rank[rooty]: self.parent[rooty] rootx else: self.parent[rootx] rooty if self.rank[rootx] self.rank[rooty]: self.rank[rooty] 1 self.count - 1 def numIslands(grid): if not grid: return 0 rows, cols len(grid), len(grid[0]) uf UnionFind(grid) for r in range(rows): for c in range(cols): if grid[r][c] 1: grid[r][c] 0 for dr, dc in [(-1,0),(1,0),(0,-1),(0,1)]: nr, nc r dr, c dc if 0 nr rows and 0 nc cols and grid[nr][nc] 1: uf.union(r * cols c, nr * cols nc) return uf.count3. 算法优化与变种问题3.1 空间复杂度优化对于DFS/BFS解法可以通过以下方式优化空间使用原矩阵标记访问状态如将1改为0使用位运算压缩状态信息BFS中使用双端队列优化3.2 常见变种问题统计岛屿的最大面积统计封闭岛屿数量岛屿不接触网格边缘统计不同形状岛屿的数量允许对角线连接的岛屿数量统计动态岛屿问题网格会随时间变化4. 面试技巧与注意事项明确问题边界条件空网格处理全0或全1的情况网格只有一行或一列的情况代码实现细节使用方向数组简化相邻节点访问避免重复创建临时变量注意Python中列表的浅拷贝问题复杂度分析要点每个节点最多被访问一次递归深度的影响因素并查集路径压缩的效率测试用例设计test_cases [ ([], 0), # 空网格 ([[0]], 0), # 单个水单元格 ([[1]], 1), # 单个陆地单元格 ([[1,1,1],[0,0,0],[1,1,1]], 2), # 两行岛屿 ([[1,0,1],[0,1,0],[1,0,1]], 5) # 对角线岛屿 ]5. 实际应用场景岛屿数量问题不仅是算法题在以下领域有实际应用图像处理中的连通区域分析地图服务中的地块划分电路板上的元件分组社交网络中的社群发现医学影像中的病灶区域识别理解这类问题的解法有助于处理更复杂的实际场景比如动态变化的网格环境三维空间的连通域分析带权重的区域划分问题

相关新闻

2026/8/10 3:24:19

Linux磁盘空间管理:du命令实战技巧与原理

1. Linux文件统计利器:du命令深度解析在Linux系统管理中,磁盘空间管理是每个运维人员和开发者必须掌握的基础技能。当你的服务器突然报警磁盘空间不足,或者需要清理老旧日志文件时,快速准确地定位"磁盘大户"就显得尤为重…

2026/8/10 3:24:19

3分钟搞定音乐识别:ShazamAPI让你轻松识别任何歌曲

3分钟搞定音乐识别:ShazamAPI让你轻松识别任何歌曲 【免费下载链接】ShazamAPI Fully reverse engeenired shazam api 项目地址: https://gitcode.com/gh_mirrors/sh/ShazamAPI 你听过一首好听的歌却不知道歌名?想为视频配乐却找不到合适的音乐信…

2026/8/10 3:24:19

VMware Workstation Pro 2026 本地安装与虚拟机创建全流程指南

这次我们来看 VMware Workstation Pro 2026 版本的本地安装与使用。对于需要在单台物理机上运行多个操作系统进行开发、测试或学习的用户来说,VMware 依然是功能最全面、性能最稳定的桌面虚拟化方案之一。新版本通常会带来更好的兼容性、性能优化以及对最新宿主和客…

2026/8/10 4:34:21

3分钟解锁Office完整功能:Ohook开源方案深度解析

3分钟解锁Office完整功能:Ohook开源方案深度解析 【免费下载链接】ohook An universal Office "activation" hook with main focus of enabling full functionality of subscription editions 项目地址: https://gitcode.com/gh_mirrors/oh/ohook …

2026/8/10 4:34:21

3个颠覆性功能:重新定义你的GTA5线上模式体验

3个颠覆性功能:重新定义你的GTA5线上模式体验 【免费下载链接】GTA5OnlineTools GTA5线上小助手 项目地址: https://gitcode.com/gh_mirrors/gt/GTA5OnlineTools 还在为洛圣都的生存法则头疼吗?GTA5线上小助手就是你的终极解决方案。这款开源工具…

2026/8/10 4:34:21

蜂蜜与尖刺:生态叙事中的边界艺术

1. 项目概述:当蜂蜜遇上尖刺的隐喻世界"蜂蜜与尖刺"这个看似矛盾的组合,实际上构建了一个关于生存法则的微型宇宙。我在自然观察笔记中记录过这样一个场景:某片林区的野蜂将蜂巢筑在黑莓丛深处,金黄的蜜汁与锐利的尖刺仅…

2026/8/10 4:29:21

ComfyUI视频合成节点:掌握AI视频创作的5个关键技巧

ComfyUI视频合成节点:掌握AI视频创作的5个关键技巧 【免费下载链接】ComfyUI-VideoHelperSuite Nodes related to video workflows 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-VideoHelperSuite 在AI视频创作领域,ComfyUI-VideoHelper…

2026/8/9 0:01:56

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/9 0:01:56

当 LLM 遇见大文档:主流开源项目如何处理上下文超限

从 Agentic Loop 到 Repo Map,七种策略与六类陷阱引言:128K vs 10MB 的硬冲突 2026 年的 LLM 上下文窗口已达到 128K ~ 1M token(≈ 0.5MB ~ 4MB 文本),但 LLM 想要处理的真实数据规模远远超过这个量级:真实…

2026/8/10 0:04:00

# AI视频生成2026:多模态控制与工程化落地的技术跃迁

## AI视频生成2026:多模态控制与工程化落地的技术跃迁### 背景:从"抽卡"到"导演"的范式转移2024年,Sora的问世让AI视频生成首次进入公众视野,但彼时的技术被开发者戏称为"抽卡"——输入一段Prompt&…

2026/8/10 0:04:00

2026年五大AI编码CLI工具深度横评:从原理到实战选型指南

1. 项目概述:为什么我们需要对比AI编码CLI工具?如果你和我一样,每天有超过一半的时间是在终端里度过的,那么“效率”就是你最核心的追求。从最初的代码补全插件,到集成在IDE里的智能助手,再到如今能直接在命…

2026/8/7 9:44:18

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/7 19:03:32

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/9 15:24:19

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…