【力扣】374.猜数字大小

简介: 【力扣】374.猜数字大小

374.猜数字大小

题目描述

猜数字游戏的规则如下:

  • 每轮游戏,我都会从 1n 随机选择一个数字。 请你猜选出的是哪个数字。
  • 如果你猜错了,我会告诉你,你猜测的数字比我选出的数字是大了还是小了。

你可以通过调用一个预先定义好的接口 int guess(int num) 来获取猜测结果,返回值一共有 3 种可能的情况(-110):

  • -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 <= 231 - 1
  • 1 <= pick <= n

解题方案

  • C 二分法
/**
 * Forward declaration of guess API.
 * @param  num   your guess
 * @return       -1 if num is higher than the picked number
 *            1 if num is lower than the picked number
 *               otherwise return 0
 * int guess(int num);
 */
int guessNumber(int n) {
    int left = 1, right = n; // 定义左值、右值
    int mid = 0;             // 定义中值

    while (left <= right) {
        mid = left + (right - left) / 2; // 计算中值
        int ret = guess(mid);            // 猜数
        if (ret == 0) {
            return mid;
        } else if (ret == 1) {
            left = mid + 1; // 增大左值
        } else {
            right = mid - 1; // 减小右值
        }
    }
    return 0;
}

复杂度分析

时间复杂度为 O(log⁡n),n 为区间初始长度。

空间复杂度为 O(1)。


相关文章
|
7月前
leetcode:374. 猜数字大小(二分查找)
leetcode:374. 猜数字大小(二分查找)
41 0
【Leetcode -367.有效的完全平方数 -374.猜数字大小】
【Leetcode -367.有效的完全平方数 -374.猜数字大小】
49 0
|
7月前
L1-056 猜数字
L1-056 猜数字
36 0
|
7月前
|
算法
【力扣】136. 只出现一次的数字
【力扣】136. 只出现一次的数字
|
7月前
|
C++
【PTA】L1-056 猜数字 (C++)
【PTA】L1-056 猜数字 (C++)
87 0
【PTA】L1-056 猜数字 (C++)
|
7月前
|
BI
猜数字
猜数字
39 0
|
7月前
leetcode:476. 数字的补数
leetcode:476. 数字的补数
114 0
|
C++ 索引
有效的字母异位词(力扣刷题)
有效的字母异位词(力扣刷题)
|
机器学习/深度学习 算法
【LeetCode】只出现一次的数字
【LeetCode】只出现一次的数字
【LeetCode】只出现一次的数字
|
Python
LeetCode 374. 猜数字大小
猜数字游戏的规则如下: 每轮游戏,我都会从 1 到 n 随机选择一个数字。 请你猜选出的是哪个数字。 如果你猜错了,我会告诉你,你猜测的数字比我选出的数字是大了还是小了。
127 0

热门文章

最新文章