Advertisement

笔试题:团队活动分类

阅读量:

现有n名个体,每位个体均被赋予一个唯一的编号,编号范围为1至n;为了统计分组状况,有部分人提出愿意分组的个体提交一个数字,表示其将与该数字对应的编号者归为同一组。

已知每个人的提交信息,请判断最终能够形成多少个独立的小组?

注意:若1与2在同一组,2与3在同一组,则1、2、3三者属于同一组。默认情况下,每个人单独构成一组。

输入:

第一行:n(代表共有n个人,1<=n<=100000)

第二行:n个数值(1<=a[i]<=100000)

输出:

输出一个整数,表示最终这些人的分组总数

样例输入:

5

1 3 4 2 1

样例输出:

2

思路:

例如存在r个分组:第1、第2、第3……第r组,将每个分组中第一个成员(即该分组中编号最小的那位)的所属分组标记为r,并将该分组内所有成员的所属分组统一设置为与第一位相同(相当于每棵树代表一个集合,集合中的每个成员都指向其根节点);这样,在处理到第i+1位成员时,只需查看当前第i位成员所提交的编号对应的人属于哪个小组,并将其归属设为相同的小组即可。以示例为例,比如a[2]=3,则将其与a[2]=2进行比较并取较小值,即a[2]=2,则将a[3]设置为2。每次操作都取较小值即可完成归类。

代码如下:

复制代码
 import java.util.HashMap;

全部评论 (0)

还没有任何评论哟~