First Bad Version — Left Boundary Binary Search

Sanjeev SharmaSanjeev Sharma
1 min read

Advertisement

Problem 302 · First Bad Version

Difficulty: Easy · Pattern: Left Boundary

Find the first version that is bad. isBadVersion(version) is given.

Solutions

# Python
def firstBadVersion(n):
    lo, hi = 1, n
    while lo < hi:
        mid = lo + (hi-lo)//2
        if isBadVersion(mid): hi = mid   # could be first bad
        else: lo = mid+1                  # first bad is after mid
    return lo
// Java
public int firstBadVersion(int n) {
    int lo=1, hi=n;
    while (lo<hi) {
        int mid=lo+(hi-lo)/2;
        if (isBadVersion(mid)) hi=mid;
        else lo=mid+1;
    }
    return lo;
}
// C++
int firstBadVersion(int n) {
    int lo=1, hi=n;
    while (lo<hi) {
        int mid=lo+(hi-lo)/2;
        if (isBadVersion(mid)) hi=mid;
        else lo=mid+1;
    }
    return lo;
}

Complexity

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

Key: lo = mid+1, hi = mid (not mid-1)

This is the left-boundary template. Loop ends when lo==hi==answer.

Advertisement

Sanjeev Sharma

Written by

Sanjeev Sharma

Full Stack Engineer · E-mopro