public int guessNumber(int n) {
int begin = 1;
int end = n;
while(begin <= end) {
int mid = begin + (end - begin) / 2;
if(guess(mid) == 0) {
return mid;
} else if(guess(mid) == -1) {
end = mid - 1;
} else {
begin = mid + 1;
}
}
return -1;
}
本题的关键点:
这题本来没什么难度,但是其中有个测试数据n = 2126753390
这个时候用原始的二分查找 mid = (begin + end) / 2;会导致溢出
所以这个地方应该改为 mid = begin + (end - begin) / 2; 计算结果和原来是相同的,但是却避免了溢出。