狗家店面

给定一个包含双链表结点(结点中的值为一个整数,结点与结点间或许相临)的list, 求集群的个数。
例子:
双链表:
(1) ⇔ (2) ⇔ (3) ⇔ (4) ⇔ (5)数组和集群个数[(1) ,(3), (5)] ⇒ 3释义:由提供的链表可以看出,结点1,3,5互不相邻,形成三个集群,以下例子类似。[(1), (2), (3)] ⇒ 1[(1), (2), (4), (5)] ⇒ 2

楼主怎么解决的?unionfind么?

请问整数的存储类型是int还是Integer呢?

先全部加到set里 扫一遍set:如果当前节点的pre不在set里 count ++ 其他情况continue

补充内容 (2018-11-8 13:10):
还有种情况是pre为null 也count++

不好意思没太看明白集群的定义,不相临的节点?能麻烦楼主解释一下吗?已加米,谢谢!

绝对正解!

可以初始化count为array.length. 把array的node都放入set中。
if(set.contains(cur)){
if(cur.prev != null && set.contains(cur.prev)) count–;
}
cur = cur.next
}
return count;

没想出来unionfind怎么解决,因为所有结点都是相连的。
当时直接想的是用一个array记录访问过的结点,访问过1,未访问过为0,然后for loop一遍输入的array,如果访问过就跳过,每次循环用一个array记录当前集群所有节点,然后里层再嵌套一个for 循环扫所有未访问过的结点,并检查该结点与当前集群所有集群是否相邻,如果相邻加加入集群,最后得出集群的数量。时间复杂度比较高是0(n^3)

对,所有相邻的结点为一个集群,不好意思,可能没解释清楚

因为写的python,所以没有特别留意。。只记得是整数。。