class Solution {
public:
int findDuplicate(vector<int>& nums) {
//从索引 0 出发,按照 nums[i] 跳转,由于值在 1 到 n 之间,不会越界。
// 因为有重复数字,所以至少有两个不同的索引会指向同一个值(即同一个后继节点),从而形成环。
// 重复的数字就是环的入口
if(nums.size()<2)return -1;
int slow=nums[0],fast=nums[nums[0]];
while(slow!=fast){
slow=nums[slow];
fast=nums[nums[fast]];
}
slow=0;
while(slow!=fast){
slow=nums[slow];
fast=nums[fast];
}
return fast;
}//1 2 3 3 4
};