当前位置 博文首页 > OIqng的博客:Leetcode——374 Guess Number Higher or Lower(猜

    OIqng的博客:Leetcode——374 Guess Number Higher or Lower(猜

    作者:[db:作者] 时间:2021-07-14 10:06

    题目:

    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.

    猜数字游戏的规则如下:
    每轮游戏,我都会从 1 到 n 随机选择一个数字。 请你猜选出的是哪个数字。
    如果你猜错了,我会告诉你,你猜测的数字比我选出的数字是大了还是小了。
    你可以通过调用一个预先定义好的接口 int guess(int num) 来获取猜测结果,返回值一共有 3 种可能的情况(-1,1 或 0):
    -1:我选出的数字比你猜的数字小 pick < num
    1:我选出的数字比你猜的数字大 pick > num
    0:我选出的数字和你猜的数字一样。恭喜!你猜对了!pick == num
    返回我选出的数字。

    示例 1:

    输入:n = 10, pick = 6
    输出:6

    示例 2:

    输入:n = 1, pick = 1
    输出:1

    示例 3:

    输入:n = 2, pick = 1
    输出:1

    示例 4:

    输入:n = 2, pick = 2
    输出:2

    提示:

    1 <= n <= 2 31 2^{31} 231 - 1
    1 <= pick <= n

    提供了一个预先定义好的接口 guess(int num)
    这个接口回返回 3 个结果:
    -1:代表你猜测的数字大了
    1:代表你猜测的数字小了
    0:代表你猜对了
    本质就是一个在 1 ~ n 范围内查找某个特定的数,我们可以直接使用二分查找来找到需要的数字。我们使用mid获取中间的数字,将中间数字传递到guess 函数里。如果返回 -1, ,说明中间数字比答案大,就查找更小的那一半。类似的,如果返回 1 ,我们就查找更大的一半,如果返回0,就代表找到了。

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

    复杂度分析:

    时间复杂度: O( l o g 2 log_2 log2?n) 。为二分查找的时间复杂度。
    空间复杂度: O(1) 。没有使用额外的空间。

    在这里插入图片描述

    cs
    下一篇:没有了