简单的思路:创建一个length长度的变长数组,作为hash表,出现一次加一,最后遍历原数组找到第一个出现一次的。
练习了c语言动态内存开辟
bool duplicate(int numbers[], int length, int* duplication) {
if (duplication == NULL || numbers == NULL) {
return false;
}
int *p = NULL;
int i = 0;
p = (int*)calloc(length, sizeof(int));
if (p != NULL) {
for (i = 0; i < length; i++) {
*(p + numbers[i]) +=1 ;
}
for (i = 0; i < length; i++) {
if (*(p + numbers[i]) > 1) {
*duplication = numbers[i];
free(p);
p = NULL;
return true;
}
}
}
free(p);
p = NULL;
return false;
}