件名の説明:
あなたは、彼は現在、新製品を開発するチームをリードして、プロダクトマネージャーです。残念ながら、お使いの製品の最新バージョンは、品質検査に合格しませんでした。各バージョンの開発の以前のバージョンをベースにしているため、その間違ったバージョンのすべてのそれ以降のバージョンが間違っています。
あなたが持っているn個のバージョン[1、2、...、N]とし、あなたは最初のバージョン・エラーの後、間違ったバージョンにすべてのリードの知りたいです。
あなたは、ユニットテストでバージョン番号のバージョンエラーかどうかを決定するブールisBadVersion(バージョン)インターフェイスを呼び出すことができます。最初の誤ったバージョンを見つけるために、機能を実装します。あなたは、API呼び出しの回数を減らすようにしてください。
例:
所与のN = 5、及び= 4の最初のバージョンは、間違ったバージョンです。
isBadVersionを呼び出します(3) - >偽
の呼び出しisBadVersion(5) - >真
>真- (4)isBadVersionを呼び出します
そこで、図4は、第1の間違ったバージョンです。
問題解決のアイデア:
二分法、左側の境界を示す悪いバージョンであれば、中間に等しいその端ように中間+ 1を開始することが等しくなるように現在のバージョンは、右側の境界を示す、良好な値である場合
# 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
"""
begin,end=1,n
while begin<end:
mid=(begin+end)//2
if isBadVersion(mid):#是坏版本,边界在左边
end=mid
else:
begin=mid+1#不是坏版本,边界在右边
return begin