本道题是较为简单的数组问题,只需要找到重复的数字,并不是找到所有的数字。一开始想着遍历完所有的数组元素,但会出现超出时间设置。
1 int findRepeatNumber(int* nums, int numsSize){ 2 int i,j,k=0; 3 int s[numsSize]; 4 // qsort(nums,numsSize,sizeof(nums[0]),cmp); 5 for(i=0;i<numsSize;i++) 6 { 7 for(j=i+1;j<numsSize;j++) 8 { 9 if(nums[i]==nums[j]) 10 { 11 s[k]=nums[i]; 12 k++; 13 } 14 } 15 } 16 /* 17 j=i+1; 18 if(nums[i]==nums[j]) 19 { 20 s=nums[i]; 21 break; 22 } 23 24 } 25 */ 26 int n=rand()%k; 27 return s[n]; 28 }
后来决定对数组进行排序,由于题中要求的是输出任意一个重复元素。因此,只要找到排序后相邻的相同的元素即可。代码如下:
1 //#define MAX 100000 2 int cmp(const void *a,const void *b) 3 { 4 return *(int *)a-*(int *)b; 5 } 6 int findRepeatNumber(int* nums, int numsSize){ 7 int i,j,k=0; 8 int s; 9 qsort(nums,numsSize,sizeof(nums[0]),cmp); 10 for(i=0;i<numsSize-1;i++) 11 { 12 j=i+1; 13 if(nums[i]==nums[j]) 14 { 15 s=nums[i]; 16 break; 17 } 18 19 } 20 // int n=rand()%k; 21 return s; 22 }