题目:
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!
Example:
n = 10, I pick 6. Return 6.题目链接
题意:
有一个猜数字的游戏,事前在1~n之间拿走一个数,然后告诉你n,每次猜一个数,假如拿走的数比你猜的数大,就返回1,小就返回-1,相同返回0,通过这个API,实现程序猜出这个数是什么。
我们可以二分查找这个数,初始l = 0,r = n,每次判断guess(mid)的情况,根据guess(mid)的值来选择下一步。
- -1 : r = mid - 1
- 1 : l = mid + 1
- 0 : return mid
由于假如n为int界限的值,那么l+r就会越界,发生计算错误,所以中间变量不能用int。
代码如下:
int guess(int num);
class Solution {
public:
int guessNumber(int n) {
long long l = 1, r = n;
while (l < r) {
int mid = (l + r) / 2;
int status = guess(mid);
if (status == -1) { // mid > pick
r = mid - 1;
}
else if (status == 1) { // mid < pick
l = mid + 1;
}
else {
return mid;
}
}
return l;
}
};