给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。
示例 1:
输入:[1,3,4,2,2]
输出: 2
思路:
数大小在1~n之间,因此数组中每个数都是有效的,使用快慢指针,若有重复元素表明有环,找到环的入口点与找有环链表入口节点方法相同。
class Solution {
public int findDuplicate(int[] nums) {
//快慢指针
int slow=0;
int fast=0;
while(true){
slow=nums[slow];
fast=nums[nums[fast]];
if(slow==fast){
fast=0;
while(slow!=fast){
slow=nums[slow];
fast=nums[fast];
}
if(slow==fast){
return slow;
}
}
}
}
}