来源:374. 猜数字大小
思路:
猜数字游戏的本质就是个二分,题目会有一个数 pick,然后你在一个区间[1, n] 中二分查找这个数,由于你实现不知道 pick 是多少,所以需要出题人告诉你这个数大了还是小了,还是猜中了(guess 函数的功能),这部分相当于二分中的 check 函数。
代码:
/**
* Forward declaration of guess API.
* @param num your guess
* @return -1 if num(pick) is lower than the guess number
* 1 if num(pick) is higher than the guess number
* otherwise return 0
* int guess(int num);
*/
// “我的数字”是指题目一开始指定的pick数
class Solution {
public:
int guessNumber(int n) {
int l = 1, r = n;
while (l < r) {
int mid = l + 0ll + r >> 1;
if (guess(mid) == 0) return mid;
if (guess(mid) == -1) r = mid;
else if (guess(mid) == 1) l = mid + 1;
}
return l;
}
};