当前位置: 首页 > article >正文

LeetCode刷题实战:用并查集(Union-Find)秒杀“朋友圈”和“岛屿数量”这类题目(附Python/Java代码)

并查集实战用Union-Find高效解决LeetCode朋友圈与岛屿问题在算法面试中并查集Union-Find是一种常被忽视却威力巨大的数据结构。它能在近乎常数时间内完成集合合并与查询操作特别适合处理动态连通性问题。本文将以LeetCode经典题目547号「朋友圈」和200号「岛屿数量」为例手把手教你如何识别并查集适用场景并给出可直接套用的Python/Java代码模板。1. 并查集核心原理与优化策略并查集本质上是通过森林结构维护动态连通关系的工具。其核心操作包含Find查找元素所属集合即根节点Union合并两个元素所在的集合Connected判断两个元素是否连通1.1 三种实现方式对比实现方式Find时间复杂度Union时间复杂度空间复杂度适用场景Quick-FindO(1)O(N)O(N)查询频繁但合并少的场景Quick-UnionO(tree height)O(tree height)O(N)一般情况加权Quick-UnionO(logN)O(logN)O(N)大规模数据合并# 加权Quick-Union Python实现 class UnionFind: def __init__(self, size): self.root [i for i in range(size)] self.rank [1] * size def find(self, x): while x ! self.root[x]: x self.root[x] return x def union(self, x, y): rootX self.find(x) rootY self.find(y) if rootX ! rootY: if self.rank[rootX] self.rank[rootY]: self.root[rootY] rootX elif self.rank[rootX] self.rank[rootY]: self.root[rootX] rootY else: self.root[rootY] rootX self.rank[rootX] 1提示路径压缩优化可以在find操作中将节点直接链接到根节点进一步降低树高。只需在find方法中添加一行self.root[x] self.root[self.root[x]]2. LeetCode 547朋友圈问题实战题目描述一个班级中有N个学生给出M×M的矩阵表示朋友关系1表示直接朋友求朋友圈总数。2.1 问题转化技巧将每个学生视为节点朋友关系视为边。朋友圈数量等于连通分量的数量初始化并查集每个学生独立成集合遍历矩阵对每个为1的关系执行union操作最终统计根节点数量即为答案// Java解法 class Solution { public int findCircleNum(int[][] M) { int n M.length; UnionFind uf new UnionFind(n); for (int i 0; i n; i) { for (int j i 1; j n; j) { if (M[i][j] 1) { uf.union(i, j); } } } return uf.count(); } class UnionFind { private int[] parent; private int count; public UnionFind(int n) { parent new int[n]; for (int i 0; i n; i) { parent[i] i; } count n; } public int find(int p) { while (p ! parent[p]) { parent[p] parent[parent[p]]; // 路径压缩 p parent[p]; } return p; } public void union(int p, int q) { int rootP find(p); int rootQ find(q); if (rootP rootQ) return; parent[rootP] rootQ; count--; } public int count() { return count; } } }2.2 复杂度分析时间复杂度O(N²α(N))其中α为反阿克曼函数通常认为接近O(1)空间复杂度O(N)用于存储父节点数组3. LeetCode 200岛屿数量问题题目描述给定由1陆地和0水组成的二维网格计算岛屿数量被水包围的陆地连通区域。3.1 并查集解法步骤初始化将每个1视为独立岛屿0不处理遍历网格对每个1检查其右侧和下侧相邻格子如果相邻也是1则执行union操作最终统计根节点数量即为岛屿数# Python解法 class Solution: def numIslands(self, grid: List[List[str]]) - int: if not grid: return 0 rows, cols len(grid), len(grid[0]) uf UnionFind(rows * cols) directions [(1,0), (0,1)] # 只需检查右和下 count 0 for i in range(rows): for j in range(cols): if grid[i][j] 1: count 1 idx i * cols j for di, dj in directions: ni, nj i di, j dj if 0 ni rows and 0 nj cols and grid[ni][nj] 1: nidx ni * cols nj if not uf.connected(idx, nidx): uf.union(idx, nidx) count - 1 return count3.2 优化技巧虚拟节点法为所有水域创建公共父节点减少union操作按秩合并在union时总是将小树合并到大树下保持树平衡一维映射将二维坐标线性化为一维索引简化处理4. 并查集解题模板与调试技巧4.1 通用解题模板识别问题类型涉及动态连通性、分组或聚类的问题设计节点与边确定什么作为节点什么关系触发union初始化结构根据数据规模创建并查集实例处理边界条件如空输入、单个元素等特殊情况统计结果通过count或遍历计算连通分量4.2 常见错误排查数组越界确保find操作中的索引有效初始化错误父数组应初始化为各自索引重复合并union前应先检查是否已连通方向遗漏在网格问题中确保检查所有必要方向// 调试示例打印并查集状态 void debugPrint(UnionFind uf, int n) { System.out.print(Parent: ); for (int i 0; i n; i) { System.out.print(uf.find(i) ); } System.out.println(); }掌握并查集不仅能解决特定算法题更能培养将实际问题抽象为连通性问题的思维能力。建议在理解基础实现后尝试解决LeetCode 128最长连续序列、130被围绕的区域等扩展题目来巩固这一技术。

相关文章:

LeetCode刷题实战:用并查集(Union-Find)秒杀“朋友圈”和“岛屿数量”这类题目(附Python/Java代码)

并查集实战:用Union-Find高效解决LeetCode朋友圈与岛屿问题 在算法面试中,并查集(Union-Find)是一种常被忽视却威力巨大的数据结构。它能在近乎常数时间内完成集合合并与查询操作,特别适合处理动态连通性问题。本文将以…...

Alpamayo-R1-10B保姆级教程:Windows WSL2环境下通过NVIDIA Container Toolkit部署

Alpamayo-R1-10B保姆级教程:Windows WSL2环境下通过NVIDIA Container Toolkit部署 1. 引言:为什么要在Windows上部署自动驾驶AI模型? 如果你对自动驾驶技术感兴趣,或者正在从事相关的研究开发工作,那么Alpamayo-R1-1…...

Flink 1.11.2 + ClickHouse实战:手把手教你搭建实时商品浏览看板(附Tableau自动刷新技巧)

Flink ClickHouse 实时商品热度分析系统:从数据管道到自动刷新看板的完整实践 电商运营团队每天最关心的问题之一,就是哪些商品正在被用户频繁浏览。这些实时数据如果能快速转化为可视化的热力图,就能帮助运营人员及时调整推荐策略、优化库存…...

MinerU-Diffusion:文档OCR解码提速3.2倍新方案

MinerU-Diffusion:文档OCR解码提速3.2倍新方案 【免费下载链接】MinerU-Diffusion-V1-0320-2.5B 项目地址: https://ai.gitcode.com/OpenDataLab/MinerU-Diffusion-V1-0320-2.5B 导语 MinerU-Diffusion框架通过将文档OCR重构为逆渲染问题,采用并…...

EEGLAB进阶实战:从原始EEG到ERP成分的精准提取与可视化分析

1. EEGLAB入门:理解ERP分析的核心流程 第一次接触EEGLAB时,我被它强大的功能和复杂的界面弄得晕头转向。经过多次实战,我发现理解ERP分析的完整流程是关键。就像做菜需要先备料再烹饪一样,EEG数据处理也需要遵循特定步骤。 原始EE…...

DAMOYOLO-S边缘端部署指南:STM32F103C8T6嵌入式平台推理优化

DAMOYOLO-S边缘端部署指南:STM32F103C8T6嵌入式平台推理优化 1. 引言 如果你正在为一个资源极其有限的嵌入式设备寻找一个能跑起来的目标检测方案,比如用一块小小的STM32F103C8T6开发板,那么这篇文章就是为你准备的。你可能已经尝试过一些经…...

06_gstack发布运营:一键发布与文档同步机制

06_gstack发布运营:一键发布与文档同步机制关键字:gstack、一键发布、ship技能、document-release、文档同步、发布流水线、CHANGELOG、PR自动化、retro、工程回顾你上一次修改完代码到实际提交 PR,中间经历了多少步? git stash&a…...

Anything V5服务优化指南:如何调整参数获得最佳生成效果

Anything V5服务优化指南:如何调整参数获得最佳生成效果 1. 理解Anything V5的核心参数 1.1 分辨率设置对生成效果的影响 Anything V5支持多种分辨率设置,但不同分辨率会直接影响生成速度和质量: 512x512:默认设置&#xff0c…...

WuliArt Qwen-Image Turbo部署案例:边缘计算设备(Jetson AGX Orin)适配进展

WuliArt Qwen-Image Turbo部署案例:边缘计算设备(Jetson AGX Orin)适配进展 1. 引言:当极速文生图遇上边缘AI 想象一下,你有一台强大的边缘计算设备,比如英伟达的Jetson AGX Orin,它被设计用于…...

RexUniNLU零样本NLU详细步骤:MRC阅读理解任务Schema编写与调用

RexUniNLU零样本NLU详细步骤:MRC阅读理解任务Schema编写与调用 1. 引言:什么是RexUniNLU和MRC任务 如果你正在寻找一个能够理解中文、不需要训练就能直接使用的自然语言处理工具,RexUniNLU可能就是你要找的解决方案。这个基于DeBERTa模型的…...

nlp_gte_sentence-embedding_chinese-large长文本处理技巧:分段与聚合策略

nlp_gte_sentence-embedding_chinese-large长文本处理技巧:分段与聚合策略 1. 引言 你是不是也遇到过这样的问题:手头有一篇几十页的技术报告或者学术论文,想要用nlp_gte_sentence-embedding_chinese-large模型来提取文本向量,却…...

Stable Yogi Leather-Dress-Collection开源模型应用:ACG创作者无需订阅即可拥有的本地皮衣工具

Stable Yogi Leather-Dress-Collection开源模型应用:ACG创作者无需订阅即可拥有的本地皮衣工具 1. 项目概述 Stable Yogi Leather-Dress-Collection是一款专为动漫创作者设计的2.5D皮衣穿搭生成工具。基于Stable Diffusion v1.5和Anything V5动漫底座模型开发&…...

Stable Yogi 模型SolidWorks插件概念设计:AI生成皮革产品3D建模贴图

Stable Yogi 模型SolidWorks插件概念设计:AI生成皮革产品3D建模贴图 最近和几位做工业设计的朋友聊天,他们提到一个挺有意思的痛点:在SolidWorks里建好一个皮包或者皮靴的3D模型后,想看看不同材质、不同纹理的效果,比…...

数据救援3大维度全解析:开源工具TestDisk PhotoRec实战指南

数据救援3大维度全解析:开源工具TestDisk & PhotoRec实战指南 【免费下载链接】testdisk TestDisk & PhotoRec 项目地址: https://gitcode.com/gh_mirrors/te/testdisk 硬盘数据恢复是每个技术人员都可能面临的挑战,当遭遇分区损坏、文件…...

OpenClaw终极指南:GLM-4.7-Flash从入门到精通

OpenClaw终极指南:GLM-4.7-Flash从入门到精通 1. 为什么选择OpenClawGLM-4.7-Flash组合 去年冬天,当我第一次尝试用Python脚本自动化处理日报时,发现传统脚本在面对动态网页和复杂文档时显得力不从心。直到遇见OpenClaw这个能像人类一样操作…...

AgentCPM模型API接口设计规范与安全防护最佳实践

AgentCPM模型API接口设计规范与安全防护最佳实践 最近在帮几个团队把他们的AgentCPM模型从本地测试环境搬到线上,发现大家普遍有个误区:觉得模型能跑通、接口能调通,就算部署成功了。结果呢,没过多久就遇到了各种问题——有人恶意…...

Anno 1800模组加载器:从入门到精通的完整指南

Anno 1800模组加载器:从入门到精通的完整指南 【免费下载链接】anno1800-mod-loader The one and only mod loader for Anno 1800, supports loading of unpacked RDA files, XML merging and Python mods. 项目地址: https://gitcode.com/gh_mirrors/an/anno1800…...

开源大模型部署新范式:像素幻梦Streamlit前端+diffusers后端架构解析

开源大模型部署新范式:像素幻梦Streamlit前端diffusers后端架构解析 1. 项目概览 像素幻梦(Pixel Dream Workshop)是一款基于FLUX.1-dev扩散模型的像素艺术生成工具,它重新定义了AI艺术创作的用户体验。与传统AI绘图工具不同,它采用了独特的…...

高效保存微信聊天记录:3步实现永久备份与深度分析完整指南

高效保存微信聊天记录:3步实现永久备份与深度分析完整指南 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/W…...

Qwen3.5-4B模型网络协议分析应用:模拟客户端与解析通信数据

Qwen3.5-4B模型网络协议分析应用:模拟客户端与解析通信数据 1. 网络协议分析的AI新思路 网络协议分析一直是运维工程师和安全研究人员的日常工作重点。传统方法需要人工查阅RFC文档、编写测试代码、分析抓包数据,整个过程耗时费力。Qwen3.5-4B模型的出…...

音频处理必备:5分钟搞懂IIR和FIR滤波器的区别与应用场景

音频处理必备:5分钟搞懂IIR和FIR滤波器的区别与应用场景 在音乐制作和音频工程领域,滤波器是塑造声音的核心工具之一。无论是调整均衡、消除噪声还是创造特殊音效,都离不开对IIR和FIR这两类滤波器的深入理解。许多刚入门的音频工程师常常困惑…...

构建边缘AI小语言模型

大型语言模型(LLM)在任何场合、任何设备上都可访问。 但拥有数千亿参数的LLM对于低延迟应用来说过于昂贵,而普通的SLM在保真度和一致性响应方面往往表现不佳。 为应对这一挑战,我将调优一个紧凑的Llama 3.2–3B模型,…...

YOLO X Layout模型测试:基于Pytest的自动化测试框架

YOLO X Layout模型测试:基于Pytest的自动化测试框架 当你辛辛苦苦训练或部署了一个YOLO X Layout模型,准备用它来解析合同、发票或者学术论文时,最怕遇到什么?不是模型本身不够强大,而是某次代码更新后,它…...

Qwen3-ForcedAligner-0.6B效果对比:较Whisper-v3在粤语场景提升12.7%准确率

Qwen3-ForcedAligner-0.6B效果对比:较Whisper-v3在粤语场景提升12.7%准确率 1. 引言:当语音识别遇上粤语,谁更懂你? 想象一下,你正在处理一段重要的粤语会议录音,需要把它转成文字并配上精确到每个字的时…...

VideoAgentTrek Screen Filter快速集成:为现有Web应用添加视频安全审核功能

VideoAgentTrek Screen Filter快速集成:为现有Web应用添加视频安全审核功能 1. 引言 如果你正在运营一个允许用户上传视频的Web应用,比如社交平台、在线教育网站或者内容社区,那么“内容安全”这四个字,可能已经让你头疼过不止一…...

3步搞定浏览器脚本:Greasy Fork小白也能懂的终极指南

3步搞定浏览器脚本:Greasy Fork小白也能懂的终极指南 【免费下载链接】greasyfork An online repository of user scripts. 项目地址: https://gitcode.com/gh_mirrors/gr/greasyfork 你是否厌倦了网页上烦人的广告?想要自动填充表单、一键下载视…...

HG-ha/MTools行业实践:短视频工作室AI配音+自动字幕+封面图生成闭环

HG-ha/MTools行业实践:短视频工作室AI配音自动字幕封面图生成闭环 你是不是也遇到过这样的场景?作为短视频工作室的创作者,每天都要面对海量的视频素材。一条1分钟的视频,从剪辑、配音、加字幕到制作封面,前前后后可能…...

Youtu-Parsing快速部署指南:一键启动Web服务,开箱即用解析工具

Youtu-Parsing快速部署指南:一键启动Web服务,开箱即用解析工具 1. 项目概述与核心价值 Youtu-Parsing是腾讯优图实验室推出的多模态文档智能解析模型,基于Youtu-LLM-2B构建,专为解决复杂文档解析难题而设计。不同于传统OCR工具&…...

YALMIP求解器报错看不懂?从verbose到debug,教你快速定位并解决优化问题

YALMIP求解器报错看不懂?从verbose到debug,教你快速定位并解决优化问题 当你满怀期待地运行YALMIP优化代码,却看到命令行突然跳出一片红色报错信息时,那种挫败感每个优化工程师都深有体会。"No feasible solution found"…...

深入探索UEFI Shell中的dh命令:高效检测系统Protocol安装状态

1. UEFI Shell与dh命令基础认知 刚接触UEFI开发时,我经常遇到这样的困扰:某个驱动明明编译通过了,运行时却提示"Protocol not found"。传统做法是在代码里插入调试语句,用gBS->LocateProtocol检查Protocol状态&#…...