二分搜索,求满足条件最小的位置。
循环判断条件:l <= h 判断所有的可能点,如果选择l<h的话,中间的那个点m就没有判断。
返回值:如果l=h=m=2,如果2不满足条件,那么l=m+1,即l=3;如果2满足条件,那么l=2,h=m-1,即h=1。综上,应该返回l。
代码:
# The isBadVersion API is already defined for you.
# @param version, an integer
# @return a bool
# def isBadVersion(version):
class Solution(object):
def firstBadVersion(self, n):
"""
:type n: int
:rtype: int
"""
l = 1
h = n
m = (l+h)>>1
while(l <= h):
m = (l+h)>>1
if(isBadVersion(m)):
h = m - 1
else:
l = m + 1
return l