数组中重复的数字

数组中重复的数字

http://www.nowcoder.com/questionTerminal/623a5ac0ea5b4e5f95552655361ae0a8

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

相关推荐

10-30 22:18
已编辑
毛坦厂中学 C++
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务