- 思路
还是太嫩,除了循环和排序还真的想不到什么方法,看了大家的解答,发现这种数组居然可以当做链表来看,因为有n+1个元素却只有n个value,所以一定会形成环不断循环,此时另一个指针追上来与环中某个值相等时即环头,再用另一个指针从头开始往下走,同时环头元素也往下走,则一定会出现两个值相等的情况
int findDuplicate(int* nums, int numsSize){
int slow=0, fast=0, restart=0;;
while(1){
slow = nums[slow];
fast = nums[nums[fast]];
if(slow == fast)
break;
}
while(slow!=restart){
slow = nums[slow];
restart = nums[restart];
}
return slow;
}