374. Guess Number Higher or Lower
Description of the Problem
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 <= 2^31 - 1
- 1 <= pick <= n
Solution
Code(Rust)
impl Solution {
unsafe fn guessNumber(n: i32) -> i32 {
let mut begin = 1;
let mut i_end = n;
let mut mid;
loop{
mid = begin + (i_end - begin) / 2;
match guess(mid) {
-1 => {i_end = mid - 1},
0 => {break},
1 => {begin = mid + 1},
_ => panic!(),
}
};
return mid;
}
}
Complexity
- m is size of the range
Time complexity:
- \( T(m) = O(\log_2(m)) \)
Auxiliary Space:
- \( S(m) = O(1) \)