AcWing
  • 首页
  • 活动
  • 题库
  • 竞赛
  • 应用
  • 更多
    • 题解
    • 分享
    • 商店
    • 问答
    • 吐槽
  • App
  • 登录/注册

LeetCode 287. 寻找重复数

作者: 作者的头像   半醒的狐狸 ,  2023-02-26 11:22:38 ,  所有人可见 ,  阅读 7


0


23.02.26 学习

这个题用分治的二分思想去做,根据抽屉原理
看题解:https://www.acwing.com/solution/content/2814/

区间的划分是数值,而不是下标,所以l=1,r=nums.size()-1

class Solution {
public:
    int findDuplicate(vector<int>& nums) {
        int l = 1, r = nums.size() - 1;
        while (l < r) {
            int mid = l + r >> 1; // 划分的区间:[l, mid], [mid + 1, r]
            int s = 0;
            for (auto x : nums)   // 统计在[l, mid]区间之间的数字个数
                if (x >= l && x <= mid) 
                    s ++ ;
            if (s > mid - l + 1) r = mid;
            else l = mid + 1;
        }
        return r;


    }
};

0 评论

你确定删除吗?
1024
x

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