Leetcode

Leetcode 374

Guess Number Higher or Lower

Sailorlqh
2021-10-12
2 min

# 374. Guess Number Higher or Lower

Question link is here.

# Question

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 3 possible results:

  • -1: The number I picked is lower than your guess (i.e. pick < num).
  • 1: The number I picked is higher than your guess (i.e. pick > num).
  • 0: The number I picked is equal to your guess (i.e. pick == num).

Return the number that I picked.

# Solution

Simple binary search.

# Java

/** 
 * 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 res = -1;
        int left = 0;
        int right = n;
        int mid = 0;
        while(res != 0) {
            mid = (left - right) / 2 + right;
            res = guess(mid);
            if(res == 0)
                return mid;
            if(res == 1)
                left = mid + 1;
            if(res == -1)
                right = mid - 1;
        }
        return mid;
    }
}

# Python

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

class Solution:
    def guessNumber(self, n: int) -> int:
        res = -2
        left = 0
        right = n
        ans = 0
        while res != 0:
            mid = (left - right) // 2  + right
            res = guess(mid)
            ans += 1
            if res == 0:
                return mid
            if res == -1:
                right = mid - 1
            else:
                left = mid + 1
        return mid
            
        

Time Complexity O(logn)O(logn).