# The isBadVersion API is already defined for you. | |||||
# @param version, an integer | |||||
# @return a bool | |||||
# def isBadVersion(version): | |||||
# I am assuming that the latest definitely is bad based on the way the problem is worded | |||||
# so I will just implement a binary search pretty mcuh | |||||
def isBadVersion(n): | |||||
return n >= 4 | |||||
class Solution: | |||||
def firstBadVersion(self, n): | |||||
# This check cuts out a case quickly, and also makes the logic easier to write | |||||
# because negatives and zeros no longer have to be dealt with | |||||
if isBadVersion(0): | |||||
return 0 | |||||
knownGood = 0 | |||||
knownBad = n | |||||
while knownBad - knownGood > 1: | |||||
# find the mid point | |||||
# check whether it's good or bad, and update accordingly | |||||
mid = (knownGood + knownBad) // 2 | |||||
if isBadVersion(mid): | |||||
knownBad = mid | |||||
else: | |||||
knownGood = mid | |||||
return knownBad | |||||
s = Solution() | |||||
print("Expected: 4") | |||||
print("Got:", s.firstBadVersion(5)) |
You are a product manager and currently leading a team to develop a new product. Unfortunately, the latest version of your product fails the quality check. Since each version is developed based on the previous version, all the versions after a bad version are also bad. | |||||
Suppose you have n versions [1, 2, ..., n] and you want to find out the first bad one, which causes all the following ones to be bad. | |||||
You are given an API bool isBadVersion(version) which will return whether version is bad. Implement a function to find the first bad version. You should minimize the number of calls to the API. | |||||
Example: | |||||
Given n = 5, and version = 4 is the first bad version. | |||||
call isBadVersion(3) -> false | |||||
call isBadVersion(5) -> true | |||||
call isBadVersion(4) -> true | |||||
Then 4 is the first bad version. | |||||
#!/bin/bash | |||||
python3 main.py |