题目:在一个长度为n的数组里的所有数字都在0~n-1的范围内。数组中某些数字是重复的。请找出数组中任意一个重复的数字。
方法1:排序。
方法2:哈希表。
方法3:时间复杂度O(n),空间复杂度O(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] < 0 || numbers[i] > length - 1){
return false;
}
}
for (int i = 0; i < length; ++i){
while (numbers[i] != i){
if (numbers[i] == numbers[numbers[i]]){
*duplication = numbers[i];
return true;
}
//swap numbers[i] and numbers[numbers[i]]
int temp = numbers[i];
numbers[i] = numbers[temp];
numbers[temp] = temp;
}
}
return false;
}