Leetcode 第 374 題(Guess Number Higher or Lower)

這道題考的是二分查找
要注意如果平均數的取法。如果begin 和 end 相差爲1 的話用avg = (begin + end)/ 2 會死循環。

// Forward declaration of guess API.
// @param num, your guess
// @return -1 if my number is lower, 1 if my number is higher, otherwise return 0
int guess(int num);

class Solution {
public:
    int guessNumber(int n) {
        if (n < 1) {
            cout << "this input n is less than 1\n";
            return 1;
        }
        int begin = 1;
        int end = n;
        if (guess(begin) == 0) return begin;
        if (guess(end) == 0) return end;
        int avg = (begin + end) / 2;
        int g = guess(avg);
        while (g != 0) {
            if (g < 0) {
                end = avg;
                avg = end - (end - begin) / 2;
            } else {
                begin = avg;
                avg = begin + (end - begin) / 2;
            }
            g = guess(avg);
        }
        return avg;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章