用一个初值均为0,长度和原数组相同的数组来给出现的每个数计算出现的次数,一旦出现次数大于1次表示该数重复,就可以收网了。
int duplicate(int* numbers, int numbersLen ) {
if(numbersLen == 0)
return -1;
int* arr;
arr = (int*)malloc(sizeof(int) * numbersLen);
int i;
for(i = 0; i<numbersLen; i++)
arr[i] = 0; //新数组元素初值都为0表示没出现过
for(i = 0; i < numbersLen; i++){
if(arr[numbers[i]] == 0)
arr[numbers[i]]++; //对于没出现过的数才计数
else
return numbers[i]; //对于已经出现过的数就直接返回
}
return -1;
}

京公网安备 11010502036488号