來源: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;
}
};