题目描述:
在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次。请找出数组中任意一个重复的数字。例如,如果输入的长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。
题目分析:
首先,我们可以从题目中得知数组长度为n为固定的,数据的范围也是固定的为0到n-1。因此我考虑用额外的数组来做辅助,记录数组中数字出现的次数,只要检测出某一个值出现的次数大于1,也就是重复了,返回这个值。代码如下:
代码:
1 bool duplicate(int numbers[], int length, int* duplication) { 2 int *cnt = new int[length]; 3 for(int i = 0;i<length;i++){ 4 cnt[i] = 0; 5 } 6 for(int i = 0;i < length;i++){ 7 ++cnt[numbers[i]]; 8 if(cnt[numbers[i]] >= 2){ 9 *duplication = numbers[i]; 10 return true; 11 } 12 } 13 return false; 14 }