我的题解:
这道题思路是二分查找,如果middle是false,那么第一个错误一定在它的右侧,如果是true,那么第一个错误一定在它的左侧
解题的关键:end+(start-end)/2,因为数据较大,如果(start+end)/2,则会溢出
class Solution {
public:
int firstBadVersion(int n) {
int start=1;int end=n;
int middle;
while(start<=end)
{
middle=end+(start-end)/2;//关键!
if(isBadVersion(middle)==false)
{
start=middle+1;
}
else
{
end=middle-1;
}
}
return start;
}
};