对于在数组中寻找元素,哈希表无疑是最快的,
将数组元素的值转化为哈希表中对应元素的下标,
在对该哈希表中对应元素下标的值加一,
达到遍历哈希表的目的。
因为该数组的长度为n且数字的值都在n-1范围内
所以定义哈希表的长度就是数组长度。
定义完成后,还需要将哈希表中的数据置零,否则将影响判断。
int duplicate(int* numbers, int numbersLen)
{
int hash[numbersLen]; //定义哈希表
memset(hash,0,sizeof(hash)); //将哈希表置零
for(int i=0;i<numbersLen;i++) //遍历哈希表
{
++hash[numbers[i]]; //将每个数放入哈希表的下标
if(hash[numbers[i]]>1) //如果那个元素比一大,证明重复了
{
return numbers[i]; // 返回哈希表中对应数的下标
}
}
return -1; //否则返回无-1
}