Find the Duplicate Number — Binary Search on Count

Sanjeev SharmaSanjeev Sharma
1 min read

Advertisement

Problem 328 · Find the Duplicate Number (Binary Search approach)

Difficulty: Medium · Pattern: BS on Count

Binary search on value m: count elements <= m. If count > m, duplicate is in [1,m]; else in [m+1,n].

Solutions

# Python
def findDuplicate(nums):
    lo, hi = 1, len(nums)-1
    while lo < hi:
        mid = (lo+hi)//2
        count = sum(1 for x in nums if x <= mid)
        if count > mid: hi = mid   # duplicate in [lo, mid]
        else: lo = mid+1
    return lo
// Java
public int findDuplicate(int[] nums) {
    int lo=1, hi=nums.length-1;
    while (lo<hi) {
        int mid=lo+(hi-lo)/2, cnt=0;
        for (int x:nums) if(x<=mid) cnt++;
        if (cnt>mid) hi=mid; else lo=mid+1;
    }
    return lo;
}

Complexity

  • Time: O(n log n)
  • Space: O(1)

Advertisement

Sanjeev Sharma

Written by

Sanjeev Sharma

Full Stack Engineer · E-mopro