一个比较水的方法
开一个比较大的数组temp(题目没有给出n的范围,数组大小开到1e5是可以过的)
temp数组的含义:temp[i]表示数字i在原数组中出现的次数,初始化成0
先遍历一遍原数组,如果有大于n-1的数字k,返回-1
如果不大于n-1,则记录这个数字k在原数组中出现的次数,temp[k]++;
遍历一遍原数组以后,就可以统计出原数组中每个元素出现的次数
然后遍历数组temp,如果发现某一个数出现的次数大于1,则返回这个数字
时间复杂度为o(n)
c语言代码
int duplicateInArray(int *nums, int numsSize){
int temp[100010]={0};
for(int i=0;i<numsSize;i++){
if(nums[i]>numsSize-1)return -1;
temp[nums[i]]++;
}
for(int j=0;j<numsSize;j++){
if(temp[j]>1)return j;
}
return -1;
}