LeetCode - 374. Guess Number Higher or Lower

這道題目並沒有什麼特別可說的地方,看到題目的描述就可以明白這是一個需要使用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的敏感度

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章