我第一次用的嵌套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; }