題目

題解
這道題和昨天的題一樣都是二分法,有兩個要注意的點在于:
- 注意計算left = mid + 1 而不是 left = mid,這樣方便后續操作,如判斷left > right 的時候退出回圈,
- 注意計算中點的時候數值不要超出整型范圍,要用left + (right - left) / 2 而不是 ( left + right ) / 2
上述兩細節點如果有不太清楚的可以看看我昨天類似題目寫的詳細解讀:278. 第一個錯誤的版本 - breakman
由于這里如果回傳0的話說明剛好是答案,因此我在檢測到0的時候直接回傳結果就可以,
代碼如下:
/**
* Forward declaration of guess API.
* @param num your guess
* @return -1 if num is lower than the guess number
* 1 if num is higher than the guess number
* otherwise return 0
* int guess(int num);
*/
public class Solution extends GuessGame {
public int guessNumber(int n) {
int left = 1, right = n;
int mid;
//當right大于left的時候一直回圈,當left大于right的時候退出回圈
while (right >= left) {
mid = left + (right - left) / 2;
int r = guess(mid);
if (0 == r) {
return mid;
} else if (r == 1) {
left = mid + 1;
} else {
right = mid;
}
}
return 0;
}
}
一起刷題的朋友們一起加油,順便端午節快樂~

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/287694.html
標籤:其他
