题目:
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。
例如,如果输入长度为7的数组[2,3,1,0,2,5,3],那么对应的输出是2或者3。存在不合法的输入的话输出-1
数据范围:0≤n≤10000
0\le n \le
10000 \ 0≤n≤10000
时间复杂度 O(n) O(n)\ O(n)
空间复杂度 O(n) O(n)\ O(n)
示例1
输入:[2,3,1,0,2,5,3]
返回值:2
说明:2或3都是对的
/**
* @param numbers int整型一维数组
* @param numbersLen int numbers数组长度
* @return int整型
*/
int duplicate(int* numbers, int numbersLen ) {
//numbers是题目输入的原数组,numberLen是原数组的长度
int num[numbersLen]; //我自己设置的新数组
int i = 0;
for (i=0;i<numbersLen;i++) // 初始化全部定义为0;
num[i] = 0;
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;
}
这个题主要用到的是 计时器原理 和 数组的嵌套。
将新数组的每一项的数值定义为0后,依次遍历原数组的值,将下标为原数组的新数组的值加+;
例如,原数组的值为[3,2,1,3,5,2]
那么新数组的值为 [0,1,2,2,0,1]
新数组 下标为原数组的值,值为原数组中值的个数。
依次计时即可。
下面附上牛客网中该题的链接:
…………………………………………………………………………