###### tags: `leetcode` `easy` `Binary Search` `Interactive`
# [374. 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 three possible results:
- `-1`: Your guess is higher than the number I picked (i.e. `num > pick`).
- `1`: Your guess is lower than the number I picked (i.e. `num < pick`).
- `0`: your guess is equal to the number I picked (i.e. `num == pick`).
Return the number that I picked.
## Examples
### 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
## Constraints:
- $1\leq n\leq 2^{31} - 1$
- $1\leq pick\leq n$
## Code
```c=
/**
* 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);
*/
int guessNumber(int n){
if(n == 1)
return 1;
int top = n, num = n / 2, down = 1, guessResult = guess(num), tmp;
while(1){
//Equal
if(guessResult == 0)
return num;
//Higher
if(guessResult == -1){
top = num;
num = floor(num / 2.0 + down / 2.0);
}
//Lower
if(guessResult == 1){
down = num;
num = ceil(num / 2.0 + top / 2.0);
}
guessResult = guess(num);
}
}
```
## Complexity
|Space |Time |
|- |- |
|$O(1)$|$O(\log(n))$|
## Result
- Runtime: 3 ms, 42.47%
- Memory Usage: 5.4 MB, 95.11%
## Notes
- Binary search
- Integer overflow