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

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 <= n <= 231 - 1
• 1 <= pick <= n

## Solutions

• /**
* Forward declaration of guess API.
* @param  num   your guess
* @return 	     -1 if num is lower than the guess number
*			      1 if num is higher than the guess number
*               otherwise return 0
* int guess(int num);
*/

public class Solution extends GuessGame {
public int guessNumber(int n) {
int left = 1, right = n;
while (left < right) {
int mid = (left + right) >>> 1;
if (guess(mid) <= 0) {
right = mid;
} else {
left = mid + 1;
}
}
return left;
}
}

• /**
* Forward declaration of guess API.
* @param  num   your guess
* @return 	     -1 if num is lower than the guess number
*			      1 if num is higher than the guess number
*               otherwise return 0
* int guess(int num);
*/

class Solution {
public:
int guessNumber(int n) {
int left = 1, right = n;
while (left < right) {
int mid = left + ((right - left) >> 1);
if (guess(mid) <= 0) {
right = mid;
} else {
left = mid + 1;
}
}
return left;
}
};

• # The guess API is already defined for you.
# @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
# def guess(num: int) -> int:

class Solution:
def guessNumber(self, n: int) -> int:
return bisect.bisect(range(1, n + 1), 0, key=lambda x: -guess(x))


• /**
* 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
* func guess(num int) int;
*/

func guessNumber(n int) int {
return sort.Search(n, func(i int) bool {
i++
return guess(i) <= 0
}) + 1
}

• /**
* Forward declaration of guess API.
* @param {number} num   your guess
* @return 	            -1 if num is lower than the guess number
*			             1 if num is higher than the guess number
*                       otherwise return 0
* var guess = function(num) {}
*/

function guessNumber(n: number): number {
let l = 1;
let r = n;
while (l < r) {
const mid = (l + r) >>> 1;
if (guess(mid) <= 0) {
r = mid;
} else {
l = mid + 1;
}
}
return l;
}


• /**
* 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);
*/

public class Solution : GuessGame {
public int GuessNumber(int n) {
int left = 1, right = n;
while (left < right) {
int mid = left + ((right - left) >> 1);
if (guess(mid) <= 0) {
right = mid;
} else {
left = mid + 1;
}
}
return left;
}
}

• /**
* Forward declaration of guess API.
* @param  num   your guess
* @return 	     -1 if num is lower than the guess number
*			      1 if num is higher than the guess number
*               otherwise return 0
* unsafe fn guess(num: i32) -> i32 {}
*/

impl Solution {
unsafe fn guessNumber(n: i32) -> i32 {
let mut l = 1;
let mut r = n;
loop {
let mid = l + (r - l) / 2;
match guess(mid) {
-1 => {
r = mid - 1;
}
1 => {
l = mid + 1;
}
_ => {
break mid;
}
}
}
}
}