233.寻找重复数

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

示例 1:

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

示例 2:

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

说明:

1.不能更改原数组(假设数组是只读的)。
2.只能使用额外的 O(1) 的空间。
3.时间复杂度小于 O(n2) 。
4.数组中只有一个重复的数字,但它可能不止重复出现一次。

代码

class Solution {
public:
    int findDuplicate(vector<int>& nums) {
        int low = 1, high = nums.size() - 1;
        while (low < high) {
            int mid = low + (high - low) * 0.5;
            int cnt = 0;
            for (auto a : nums) {
                if (a <= mid) ++cnt;
            }
            if (cnt <= mid) low = mid + 1;
            else high = mid;
        }
        return low;
    }
};
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • <center>#1 Two Sum</center> link Description:Given an arr...
    铛铛铛clark阅读 2,397评论 0 3
  • 半生浮云半生梦 过去的现在的未来的也许终究是一场空 时光飞逝,一切也已变成回忆 从幼稚到成熟,从无知到理智 是过程...
    翎风自来阅读 303评论 0 0
  • 期中考试后总有成绩分析会,我的想法是,能否有班级管理阶段分析会或者是学生管理阶段分析会?7、8、9、10开个分析会...
    d187efe4b01a阅读 393评论 0 0
  • 许久没爬山了,算了一下,有七年之久了,发现从山脚到山上,一路都发生了好大的变化。 本来上去有一段很长很陡的路,一边...
    舟⼀阅读 699评论 0 1

友情链接更多精彩内容