# 0374. Guess Number Higher or Lower

<https://leetcode.com/problems/guess-number-higher-or-lower>

## 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*.

**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
```

**Constraints:**

* `1 <= n <= 231 - 1`
* `1 <= pick <= n`

## ac

```java
/* The guess API is defined in the parent class GuessGame.
   @param num, your guess
   @return -1 if my number is lower, 1 if my number is higher, otherwise return 0
      int guess(int num); */

public class Solution extends GuessGame {
    public int guessNumber(int n) {
        // edge cases

        int l = 1, r = n;
        while (l + 1 < r) {
            int m = l + (r - l) / 2;
            int res = guess(m);
            if (res == 0) return m;
            if (res == 1) {
                l = m;
            } else {
                r = m;
            }
        }

        return guess(l) == 0 ? l : r;
    }
}
```
