非最优解,仅学习记录。
算法思路:
先看清题意,第一个错误的版本,根据示例来看,出错版本返回true,正确版本返回false,即第一个返回true的版本即为第一个错误版本。
本质还是二分查找,输入一个版本号n,从n/2开始调用API检查版本,若无错则之前版本都对需检查右侧,有错则之后版本都错需检查左侧,直到找到第一个错误的版本号。
// The API isBadVersion is defined for you.
// bool isBadVersion(int version);
class Solution {
public:
int firstBadVersion(int n) {
int left=0,right=n-1;
while(left <= right){
int mid=left+((right-left)/2);
//若该版本有错即返回true,则右边都是错的则需去左侧继续遍历,看是否为第一个true
if(isBadVersion(mid)){
right=mid-1;
}else{
//若版本无错即返回false,则左边都是对的则需去右侧,找第一个true
left=mid+1;
}
}
return left;
}
};