这个题目我有几点可以总结:
1.题目中 已有的函数可以直接调用
2.bool
isBadVersion(version)它的返回值为true表示它是一个错误的版本
3.写循环条件的时侯,mid值在变,mid的表达式写在循环中。
4.mid=left+(right-left)/2;mid这样的表示方法可以避免数越界,我们一般的表示为
mid=(left+right)/2,当right非常大的时候,left+right可能产生越界,所以我们可以采用上述方法
5.对于循环条件,个人喜欢left!=right,官方回答是left<right
int firstBadVersion(int n) {
int left=1,right=n;
while(left!=right){
int mid=left+(right-left)/2;
if(isBadVersion(mid)){
right=mid;//这里要注意,不是right=mid-1,这里的表达式要充分考虑实际情况,可能这个数就是最早出现问题的版本,在二分查找的时候,mid不一样,直接就下一个,不再考虑mid了
}
else{
left=mid+1;
}
}
return left;
}
以上拙见,欢迎指正