本道题是较为简单的数组问题,只需要找到重复的数字,并不是找到所有的数字。一开始想着遍历完所有的数组元素,但会出现超出时间设置。

 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 }