Java 小朋友崇拜圈
班里N个小朋友,每个人都有自己最崇拜的一个小朋友(也可以是自己)。
在一个游戏中,需要小朋友坐一个圈,
每个小朋友都有自己最崇拜的小朋友在他的右手边。
求满足条件的圈最大多少人?
小朋友编号为1,2,3,…N
输入第一行,一个整数N(3<N<100000)
接下来一行N个整数,由空格分开。
要求输出一个整数,表示满足条件的最大圈的人数。
例如:
输入:
9
3 4 2 5 3 8 4 6 9
则程序应该输出:
4
public static void main(String[] args) {
int n = sc.nextInt();
int[] nums = new int[n];
for (int i = 0; i < n; i++) {
nums[i] = sc.nextInt();
}
int max = 0;
for (int v : nums) {
List<Integer> list = new ArrayList<>();
int cnt = 0;
int i = v;
while (!list.contains(i)) {//判断list中有没有这个第i个小朋友
list.add(i);//添加小朋友崇拜的人
i = nums[i - 1];//找到当前小朋友崇拜的人
cnt++;
if (cnt > max) {
max = cnt;
}
}
}
System.out.println(max);
}