Написано: 17.03.2023

374. Больше или меньше (Guess Number Higher or Lower)

easy

Задание.

Мы играем в угадайку. Игра заключается в следующем:

Я выбираю число от 1 до n. Вы должны угадать, какой номер я выбрал.

Каждый раз, когда вы угадаете неправильно, я буду сообщать вам, больше или меньше выбранное мной число, чем вы предполагаете.

Вы вызываете предварительно определенный API int guess(int num), который возвращает три возможных результата:

  • -1: Ваше предположение больше, чем число, которое я выбрал (т.е. num > pick).

  • 1: Ваше предположение меньше, чем число, которое я выбрал (т.е. num < pick).

  • 0: ваше предположение равно числу, которое я выбрал (т.е. num == pick).

Верните номер, который я выбрал.

Пример 1.

Входные данные: n = 10, pick = 6

Результат: 6

Пример 2.

Входные данные: n = 1, pick = 1

Результат: 1

Пример 3.

Входные данные: 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;
    }
};