这道题考的是二分查找
要注意如果平均数的取法。如果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;
}
};