题目
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!
总结
这个问题可以用最基本的二分查找来解决,初始我的代码是这样,一直通过不了,提示超时:
/* The guess API is defined in the parent class GuessGame.
@param num, your guess
@return -1 if my number is lower, 1 if my number is higher, otherwise return 0
int guess(int num); */
public class Solution extends GuessGame {
public int guessNumber(int n) {
int mid;
int res;
int low = 1;
int high = n;
while (low <= high) {
mid = (low + high) / 2;
res = guess(mid);
if (res == 0)
return mid;
else if (res < 0)
high = mid - 1;
else
low = mid + 1;
}
return -1;
}
}
然而把mid = (low + high) / 2;
改成mid = low + (high - low) / 2;
就ac,原因是low+high可能会导致溢出…
还有一种解法是三分查找,可以有更快的算法复杂度。