【力扣】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)。


相关文章
|
2月前
leetcode:374. 猜数字大小(二分查找)
leetcode:374. 猜数字大小(二分查找)
20 0
|
2月前
|
算法
leetcode-136:只出现一次的数字
leetcode-136:只出现一次的数字
22 0
【力扣每日一题】1365. 有多少小于当前数字的数字
【力扣每日一题】1365. 有多少小于当前数字的数字
|
9月前
【Leetcode -367.有效的完全平方数 -374.猜数字大小】
【Leetcode -367.有效的完全平方数 -374.猜数字大小】
28 0
|
2月前
leetcode:476. 数字的补数
leetcode:476. 数字的补数
90 0
|
2月前
|
算法
leetcode-260:只出现一次的数字 III
leetcode-260:只出现一次的数字 III
24 0
|
算法 Java C语言
leetcode之只出现一次的数字
今天为大家分享的是关于在数组中找到只出现一次数字的系列题目,我将使用c跟Java来实现,希望我的分享能够帮助到大家。
|
机器学习/深度学习 算法
【LeetCode】只出现一次的数字
【LeetCode】只出现一次的数字
【LeetCode】只出现一次的数字
|
Python
LeetCode 374. 猜数字大小
猜数字游戏的规则如下: 每轮游戏,我都会从 1 到 n 随机选择一个数字。 请你猜选出的是哪个数字。 如果你猜错了,我会告诉你,你猜测的数字比我选出的数字是大了还是小了。
106 0
|
Python
LeetCode 476. 数字的补数
给你一个 正 整数 num ,输出它的补数。补数是对该数的二进制表示取反。
79 0