并查集题目

1 可以直接用字典统计每个数出现的次数,再排序后由小到大统计每个数应该移动的次数,关键是要用一个标记来记录最后面的位置,时间复杂度O(N+klogk+k)=O(N+klogk),k是不同元素的个数,因为要排序,并查集还不会,

945. 使数组唯一的最小增量

2 两个思路,时间复杂度都是O(N),一个是先用集合去重,再不断找每个序列的最小值,来计算每个序列的长度,最后再求最大值,另一个是直接遍历,当某个值第一次出现时,计算它的上一个和下一个的长度,最后求和加1,特别要注意更新序列两端的长度,这里最重要,更新了长度才能达到并差集的效果,虽然序列中间的值没有更新,因为没有必要,

128. 最长连续序列

3 典型的利用并查集求解的题,先写一个并查集的类,类里有连个重要的方法find和union,一个是查找节点所在树的根节点,另一个是如果两个节点不在同一个树上,则合并两个不同的树,用字典和数组记录节点和其父节点都行,如果用字典,key是节点,values是父节点,如果用数组,index是节点,对应的值是父节点,为了降低复杂度,1>可以将小树合并到大树上,2>利用find方法时,同时压缩路径,将当前节点连接到其爷爷节点上,

547. 朋友圈

4 有向图树形成环唯有两个节点是同一个根节点的时候,所以一旦要连接的两个节点是同一个root节点,则返回结果,

684. 冗余连接

5 这个题中不能对等于和不等于的同时处理,可以先把等于的都建立树,再处理不等于的,如果等于了,就返回False,这是解决这个题的关键,这个题中没有先建立树节点,而是再find函数中先进行判断,如果字典中没有对应的树节点,则再建立树节点,

990. 等式方程的可满足性

原文地址:https://www.cnblogs.com/xxswkl/p/12678447.html