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