为了账号安全,请及时绑定邮箱和手机立即绑定

LeetCode-287 寻找重复数

标签:
C++

传送门: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的原创作品,如需转载,请注明出处,否则将追究法律责任


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消