int findDuplicate(int* nums, int numsSize) {
int* hash=(int*)calloc(numsSize-1,sizeof(int));
int i=0;
for(i;i<numsSize;i++)
{
hash[nums[i]]++;
}
for(i=0;i<numsSize-1;i++)
{
if(hash[i]>1)
return i;
}
}
上述方法比较简单,时间复杂度为O(n),但是空间复杂度也是O(n);
方法二 快排+查找
int cmp ( const void *a , const void *b )
{
return *(int *)a - *(int *)b;
}
int findDuplicate(int* nums, int numsSize) {
int i;
qsort(nums,numsSize,sizeof(int),cmp);
for(i=1;i<numsSize;i++)
{
if(nums[i-1]==nums[i])
return nums[i];
}
}
利用快排函数计算方便快捷,直接秒杀。
论坛有人的方法也比较巧妙,一个慢慢查找,一个快速查找,知道,两个相等为止,利用证书1-n的规则
但是不好想。
C语言
2016/2/17