# Question

Formatted question description: https://leetcode.ca/all/374.html

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

Binary search.

# Code

• 
public class Guess_Number_Higher_or_Lower {

public class Solution extends GuessGame {
public int guessNumber(int n) {
int low = 1;
int high = n;
while (low <= high) {
int mid = low + (high - low) / 2;
int res = guess(mid);
if (res == 0)
return mid;
else if (res < 0)
high = mid - 1;
else
low = mid + 1;
}
return -1;
}
}
}

// stub
class GuessGame {
public int guess(int i) {
return 0;
}
}

############

/**
* Forward declaration of guess API.
* @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;
}
}

• // OJ: https://leetcode.com/problems/guess-number-higher-or-lower/
// Time: O(logN)
// Space: O(1)
class Solution {
public:
int guessNumber(int n) {
int L = 1, R = n;
while (L <= R) {
int M = L + (R - L) / 2, g = guess(M);
if (g == 0) return M;
if (g == 1) L = M + 1;
else R = M - 1;
}
return -1;
}
};

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

############

# The guess API is already defined for you.
# @return -1 if my number is lower, 1 if my number is higher, otherwise return 0
# def guess(num):

class Solution(object):
def guessNumber(self, n):
"""
:type n: int
:rtype: int
"""
l, r = 1, n
while l < r:
m = l + (r - l) / 2
g = guess(m)
if g == -1:
r = m - 1
elif g == 1:
l = m + 1
else:
return m
return l


• /**
* Forward declaration of guess API.
* @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.
* @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.
* @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,
}
}
}
}