/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param numbers int整型一维数组
* @param numbersLen int numbers数组长度
* @return int整型
*/
int duplicate(int* numbers, int numbersLen ) {
// write code here
int *repeat = (int*) malloc (numbersLen * sizeof(int));
for(int j=0;j<numbersLen;j++) repeat[j]=0;
for(int i=0;i<numbersLen;i++){
int n=numbers[i];
if(n>=numbersLen){
return -1;
}else {
repeat[n]++;
if(repeat[n]>1){
return n;
}
}
}
return -1;
}
解题思路:创建一个长度为n的数组repeat初始化为0,下标代码出现的数字,下标对应的数组内容代表该下标数字出现的次数。然后遍历提供的数组,每出现一个数字,就去repeat数组下标对应位置内容+1,然后判断如果已经>1了,那说明重复了,直接返回这个下标数字即可。
疑问:这里为什么不能直接创建一个长度为numbersLen的数组呢? 编译报错说是numbersLen是一个会变的数字,不能用它作为数组长度,可是,当运行到这个子函数内部并创建数组的时候,numbersLen不是一个已知的且在子函数退出之前固定不变的数吗?



京公网安备 11010502036488号