Easy
2621299FavoriteShare
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'll tell you whether the number is higher or lower.
You call a pre-defined API guess(int num) which returns 3 possible results (-1, 1, or 0):
-1 : My number is lower
1 : My number is higher
0 : Congrats! You got it!
Example :
Input: n = 10, pick = 6
Output: 6
C++:
/*
* @Autor: SourDumplings
* @Date: 2019-09-17 13:36:47
* @Link: https://github.com/SourDumplings/
* @Email: changzheng300@foxmail.com
* @Description: https://leetcode.com/problems/guess-number-higher-or-lower/
*/
// Forward declaration of guess API.
// @param num, your guess
// @return -1 if my number is lower, 1 if my number is higher, otherwise return 0
int guess(int num);
class Solution
{
public:
int guessNumber(int n)
{
unsigned lo = 1, hi = n;
while (lo <= hi)
{
unsigned mi = (lo + hi) / 2;
unsigned r = guess(mi);
if (r == 0)
{
return mi;
}
else if (r == 1)
{
lo = mi + 1;
}
else
{
hi = mi;
}
}
return -1;
}
};
Java:
/*
* @Autor: SourDumplings
* @Date: 2019-09-17 13:56:47
* @Link: https://github.com/SourDumplings/
* @Email: changzheng300@foxmail.com
* @Description: https://leetcode.com/problems/guess-number-higher-or-lower/
*/
/* 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)
{
int lo = 1, hi = n;
while (lo <= hi)
{
int mi = (hi - lo) / 2 + lo; // 如果用(hi + lo) / 2会超时
int r = guess(mi);
if (r == 0)
{
return mi;
}
else if (r < 0)
{
hi = mi;
}
else
{
lo = mi + 1;
}
}
return -1;
}
}