我第一次用的嵌套for循环,太low了;
想过先排序再找第一个重复的数字,但是最小不一定最早,就pass了
AC了之后,看到这篇神作
原作主页https://www.nowcoder.com/profile/270923
原理就是标记
读完每一个数,就给他作为下标的元素加length,这样读过的都会大于length,
当下一个出现时,只需要看看该数值作为下标的元素是不是大于length就可以了,
大于,说明有过一个,不大于,说明是第一次读取
每个数%length等于原值,不影响
是真的厉害👍
bool duplicate(int numbers[], int length, int* duplication)
{
for(int i=0;i<length;i++)
{
int t = numbers[i]%length;
if(numbers[t]>=length)
{
*duplication = numbers[t]%length;
return true;
}
numbers[t]+=length;
}
return false;
}
京公网安备 11010502036488号