要求:
We are playing the Guess Game. The game is as follows:
I pick a number from 1 to n. You have to guess which number I picked.
Every time you guess wrong, I'll tell you whether the number is higher or lower.
You call a pre-defined API guess(int num)
which returns 3 possible results (-1
, 1
, or 0
):
-1 : My number is lower 1 : My number is higher 0 : Congrats! You got it!注意:思路简单,用二分法查找即可,每次更新上下限。但是有几点要注意:
1、更新下限时,low = mid + 1而不是low = mid。更新上限时,high = mid - 1而不是high = mid。
举个例子,在[1 2 3]中查找3。
如果low = mid,high = mid
那么会导致low始终指向2,更新不了!!!!!
2、不能用 ( i + j ) / 2 来更新i或者j,因为当i和j靠近int型变量的范围边缘时,有可能会导致计算的结果超出int变量的范围!!!
只能用i = i + ( j - i ) / 2
public int guessNumber(int n) {
int i = 1;
int j = n;
while (i <= j) {
int re = i + (j - i) / 2;
int flag = guess(re);
if (flag == 0)
return re;
if (flag == 1)
i = re + 1;
if (flag == -1)
j = re - 1;
}
return -1;
}