用一个初值均为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; }