AcWing
  • 首页
  • 活动
  • 题库
  • 竞赛
  • 更多
    • 题解
    • 分享
    • 问答
    • 应用
  • App
  • 教育优惠
    New
  • 登录/注册

AcWing 14. 不修改数组找出重复的数字    原题链接    简单

作者: 作者的头像   逆时针 ,  2020-08-18 20:29:19 ,  所有人可见 ,  阅读 732


2


C++ 代码

class Solution {
public:
    int duplicateInArray(vector<int>& nums) {
        int l = 1, r = nums.size() - 1;
        while (l < r) {
            int mid = l + (r - l) / 2;
            if (check(mid, nums))
                r = mid;
            else
                l = mid + 1;
        }
        // 退出循环时check(l, nums)一定为true,因为check(n, nums)为true,所以不可能是全false的情形
        return l;
    }

private:
    // predicate(x): nums中<=x的个数超过x
    // 使得predicate(x)为true的最小x一定为重复数字,所以我们只需找F F F ... F [T] T ...T 第一个true的位置
    bool check(int x, vector<int>& nums) {
        int cnt = 0;
        for (auto t : nums) {
            if (t <= x) 
                ++cnt;
        }
        return (cnt > x);
    }
};

0 评论

你确定删除吗?

© 2018-2023 AcWing 版权所有  |  京ICP备2021015969号-2
用户协议  |  隐私政策  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标 qq图标
请输入绑定的邮箱地址
请输入注册信息