Leetcode——374 Guess Number Higher or Lower(猜数字大小)

Posted OIqng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode——374 Guess Number Higher or Lower(猜数字大小)相关的知识,希望对你有一定的参考价值。

题目:

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 log2n) 。为二分查找的时间复杂度。
空间复杂度: O(1) 。没有使用额外的空间。

在这里插入图片描述

以上是关于Leetcode——374 Guess Number Higher or Lower(猜数字大小)的主要内容,如果未能解决你的问题,请参考以下文章

[leetcode] 374. Guess Number Higher or Lower

LeetCode 374. Guess Number Higher or Lower

Leetcode 374. Guess Number Higher or Lower

leetcode 374. Guess Number Higher or Lower

LeetCode 374 Guess Number Higher or Lower

leetcode-374-Guess Number Higher or Lower(二分查找)