這道題目並沒有什麼特別可說的地方,看到題目的描述就可以明白這是一個需要使用Binary Search解決的問題,所以直接使用Binary Search即可,代碼如下:
/* 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 left = 1;
int right = n;
// Binary search
while(left < right){
int mid = left + (right - left) / 2;
if(guess(mid) == -1) right = mid - 1; // guess number is higher, move to right
else if(guess(mid) == 1) left = mid + 1; // guess number is higher, move to left
else return mid; // correct
}
return left;
}
}
思考:
1. 雖然這道題目非常簡單,但並不是說沒有需要注意的問題,比如這道題目中Binary Search的模版寫法一開始竟然有些生疏了,好久寫不出來,這個問題要引起重視,對於基礎的算法和數據結構應該多加練習
2. 明白Binary Search的一個性質,就是如果while(left < right)使用這種寫法,那麼如果Binary Search找不到目標的話,最終的結果是left = right
3. 對於搜索,查找類型的問題,一定要有使用Binary Search的敏感度