面试之并查集

输入和输出的注意点:scanf读取字符时会读取空格和回车

而scanf读字符串时会自动忽略空格和回车

并查集快速处理两类操作:

  1. 将2个集合合并
  2. 询问两个元素是否在一个集合当中

几乎O(1)完成这两个操作

基本原理

每个集合用一棵树来表示,树根的编号就是整个集合的编号, 每个节点存储它的父节点,用一维数组p[x]来存储这个集合,px表示x的父节点.

问题

  • 如何判断树根 :if(p[x] == x)
  • 如何求x的集合编号:while(p[x] != x) x=p[x];
  • 如何合并两个集合: 输入2个数,不妨认为它们是两棵树(只有一个节点).px是x的根节点,py是y的根节点:
    p[x] = y

优化

路径优化,只要一条路能到达父节点,沿途路径上的点都能够到达父节点.

递归实现:

c 复制代码
int find(int x) 
{
  
  if(x != q[x]) q[x] =find(q[x]);
  return q[x];
    
}
相关推荐
流浪00122 分钟前
Linux系统篇36——线程(一) 线程的概念、本质和Linux的实现方式
linux·面试·操作系统·线程
狂师1 小时前
2026互联网大厂秋招AI Coding笔试全攻略!
人工智能·面试·求职
彧azz16 小时前
Linux 网络编程学习总结
linux·网络·笔记·学习·面试
默_笙18 小时前
💫 闭包是个背包:拆解小米前端面试题里的三道"闭包陷阱"
前端·javascript·面试
DeepAgent19 小时前
AI Agent 入门指南(05):Agent 循环——观察、思考、行动
面试·agent
顶点多余20 小时前
9.18 面试题总结 --- 绿盟
linux·面试
尾善爱看海21 小时前
《JavaScript 数组操作全攻略:12 类 API + 30 个实战场景 + 20 个避坑指南》
前端·javascript·面试
顶点多余1 天前
9.20 知识点查漏补缺
linux·面试·职场和发展
晚安日记wanna1 天前
Vue2 的 defineProperty 差在哪四层追问筛掉九成候选人
前端·vue.js·面试
tiger8651 天前
大语言模型面试和题解,梳理中国主流开源 LLM 系列的发展脉络、技术路线与工程取舍
人工智能·gpt·深度学习·算法·自然语言处理·面试·transformer