本题源自剑指offer
----------------------------------------------------------------------------------------
1 找出数组中重复的数字可以将数组排序,然后遍历数组就可以找到。时间复杂度为O(nlogn);
2 也可以利用O(n)的哈希表将数组映射,找出重复的数字,时间复杂度O(n),空间复杂度O(n);
3 因为数组中的数字是从0-n-1,排序后每个数字和它对应的下标相等,因此我们可以遍历数组如果和下标不对应,就交换直到对应。
bool duplicate(int numbers[], int length, int* duplication) {
if(numbers==NULL || length<0)
return false;
for(int i=0;i<length;i++){
if(numbers[i]>length-1 || numbers[i]<0)
return false;
while(numbers[i]!=i){
if(numbers[i]==numbers[numbers[i]]){
*duplication=numbers[i];
return true;
}
int temp=numbers[i];
numbers[i]=numbers[temp];
numbers[temp]=temp;
}
}
return false;
}