题目在这: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所指向的数。
任何不懂的地方,看我二分法的讲解文章,你必能看懂~
标签:力扣,right,版本号,mid,二分法,出错,278,left From: https://blog.51cto.com/u_15849381/5801742