First Bad Version — Left Boundary Binary Search
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