374. Guess Number Higher or Lower

1. Description

We are playing the Guess Game. The game is as follows:
I pick a number from 1 to n. You have to guess which number I picked.
Every time you guess wrong, I will tell you whether the number I picked is higher or lower than your guess.
You call a pre-defined API int guess(int num), which returns 3 possible results:

  • -1: The number I picked is lower than your guess (i.e. pick < num).
  • 1: The number I picked is higher than your guess (i.e. pick > num).
  • 0: The number I picked is equal to your guess (i.e. pick == num).

Return the number that I picked.

2. Example

Example 1

Input: n = 10, pick = 6
Output: 6

Example 2

Input: n = 1, pick = 1
Output: 1

Example 3

Input: n = 2, pick = 1
Output: 1

Example 4

Input: n = 2, pick = 2
Output: 2

3. Constraints

  • 1 <= n <= $2^{31} - 1$
  • 1 <= pick <= n

4. Solutions

Time complexity: O(logn)
Space complexity: O(1)

class Solution {
public:
    int guessNumber(int n) {
        int left = 1, right = n;
        while (left < right) {
            int middle = left + (right - left) / 2;
            int guess_result = guess(middle);

            if (guess_result < 0) {
                right = middle - 1;
            } else if (guess_result == 0) {
                return middle;
            } else {
                left = middle + 1;
            }
        }

        return left;
    }
};
comments powered by Disqus