继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

LeetCode-287 寻找重复数

holdtom
关注TA
已关注
手记 1885
粉丝 240
获赞 992

传送门:https://leetcode-cn.com/problems/find-the-duplicate-number/submissions/

给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。

示例 1:

输入: [1,3,4,2,2]

输出: 2

示例 2:

输入: [3,1,3,4,2]

输出: 3

说明:

不能更改原数组(假设数组是只读的)。

只能使用额外的 O(1) 的空间。

时间复杂度小于 O(n2) 。

数组中只有一个重复的数字,但它可能不止重复出现一次。

我的实现方法之前写的博客也有,前提是数组中最大的 数要小于数组长度

int findDuplicate(int* nums, int numsSize) {

    int k, yl, sl;

    for (int n=0;n<numsSize;n++)

    {

        k = nums[n]&0xffff;

        yl = nums[k];//目标 yl为那个位置上的加密数据

        sl = yl >> 16;

        sl++;

        nums[k]=(sl<<16) |(yl&0xffff );

    }

    for (int g=0;g< numsSize;g++)

    {

        k = nums[g];

        yl = k >> 16;

        if (yl > 1)

        {

            printf("%d\n", g);

            return g;

        }

    }

    return 0;

}

LeetCode-287 寻找重复数

速度还可以 

就是修改了源数据 不知道在函数返回前再修改回去还可以不可以。

©著作权归作者所有:来自51CTO博客作者hzChan的原创作品,如需转载,请注明出处,否则将追究法律责任


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP