Мы играем в угадайку. Игра заключается в следующем:
Я выбираю число от 1
до n
. Вы должны угадать, какой номер я выбрал.
Каждый раз, когда вы угадаете неправильно, я буду сообщать вам, больше или меньше выбранное мной число, чем вы предполагаете.
Вы вызываете предварительно определенный API int guess(int num)
, который возвращает три возможных результата:
-1
: Ваше предположение больше, чем число, которое я выбрал (т.е. num > pick
).
1
: Ваше предположение меньше, чем число, которое я выбрал (т.е. num < pick
).
0
: ваше предположение равно числу, которое я выбрал (т.е. num == pick
).
Верните номер, который я выбрал.
Входные данные: n = 10, pick = 6
Результат: 6
Входные данные: n = 1, pick = 1
Результат: 1
Входные данные: n = 2, pick = 1
Результат: 1
/**
* Forward declaration of guess API.
* @param num your guess
* @return -1 if num is higher than the picked number
* 1 if num is lower than the picked number
* otherwise return 0
* int guess(int num);
*/
class Solution {
public:
int guessNumber(int n)
{
int start = 1, end = n, mid, num = 0;
while(start <= end) {
mid = start + (end - start)/2;
if((num = guess(mid)) == 0) {
num = mid;
break;
} else if(num < 0) {
end = mid - 1;
} else {
start = mid + 1;
}
}
return num;
}
};