题目在这:​​https://leetcode-cn.com/problems/first-bad-version/​

题目分析:

也不知道大家有没有理解题目。
给了一个数组,里面存放了每个版本号 像这样:[1,2,3,4,5]
假设该版本从2号开始出错,2号出错则根据2号开发出来的后续版本都会出错。即 2,3,4,5都是错误版本。
题目会给你一个 n 假设n = 5 则要我们找到一开始出错的版本。即2号版本。
题目中判断该版本号是否出错是调用一个函数,函数返回true则表示出错。

思路分析:

一眼看~肯定二分法解决。
关于二分法的详细使用说明大家可以看我的另一篇文章,保证给你讲的明明白

简单说一下本题思路,先找mid。
如果mid符合标准(即调用函数后返回true)。
则所需要的第一个错误版本号一定在left到mid之间。
这时候让right放到mid的位置继续找新的mid。
如果mid不符合标准(即调用函数后返回false)。
则所需要的第一个错误版本号一定在mid到right之间。
这时候让left指向mid后面的一个数,继续找到新的mid

left = 1
right = n
while left < right:
mid = (left + right) // 2
if isBadVersion(n):
right = mid
else:
left = mid + 1
return

二分法稍微改动一下就行了。
这里有一点需要注意,本题不是在找mid。而是在找第一个出错的数,
所以在后面的return要返回left所指向的数。
任何不懂的地方,看我二分法的讲解文章,你必能看懂~