数组中重复的数字

数组中重复的数字

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;
}
全部评论

相关推荐

06-25 09:33
厦门大学 Java
程序员饺子:现在日常估计没啥hc了,等到八月多估计就慢慢有了。双九✌🏻不用焦虑的
投递快手等公司7个岗位
点赞 评论 收藏
分享
湫湫湫不会java:先投着吧,大概率找不到实习,没实习的时候再加个项目,然后把个人评价和荣誉奖项删了,赶紧成为八股战神吧,没实习没学历,秋招机会估计不多,把握机会。或者说秋招时间去冲实习,春招冲offer,但是压力会比较大
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-01 10:56
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务