LeetCode 287. Find the Duplicate Number【Java】

题目描述

Find the Duplicate Number

AC代码

/*
解题根据:抽屉原理
时间复杂度:O(nlogn),二分->logn 遍历->n n*logn=nlogn
*/

class Solution {
    public int findDuplicate(int[] nums) {
        int l=1,r=nums.length-1;
        while(l<r){
            int mid=l+r>>1;
            //苹果的个数
            int cnt=0;
            for(int x:nums)
                if(x>=l&&x<=mid)
                    cnt++;
            //mid-l+1可以看作是抽屉的个数
            if(cnt>(mid-l+1))
                //满足则说明l~mid区间中有重复的数字
                r=mid;
            else
                //不满足则说明l~mid区间没有重复的,需要到mid+1~r区间查看是否有重复的数字
                l=mid+1;
        }
        return r;
    }
}

发布了201 篇原创文章 · 获赞 9 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_40992982/article/details/105460090