题解 | #数组中重复的数字#
数组中重复的数字
http://www.nowcoder.com/practice/6fe361ede7e54db1b84adc81d09d8524
题目描述:
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组[2,3,1,0,2,5,3],那么对应的输出是2或者3。存在不合法的输入的话输出-1
解题思路:
由于题目里面说“长度为n的数组里的所有数字都在0到n-1范围内”,那么只需要重新设计一个等长的数组,用于计数原题目中给出的数组元素出现的次数,最后返回相应的数组元素。
如果没有说“长度为n的数组里的所有数字都在0到n-1范围内”,那就需要设计一个大范围的数组或者动态数组。
int duplicate(int* numbers, int numbersLen ) {
int num[numbersLen];
int i;
//数组初始化
for(i=0;i<numbersLen;i++){
num[i] = 0;
}
//按照给定的number数组,对应的num数组进行计数,计算有多少个重复的数字
for(i=0;i<numbersLen;i++){
num[numbers[i]]++;
}
for(i=0;i<numbersLen;i++){
if(num[numbers[i]]>1)
return numbers[i];
}
return -1;
}