侧边栏壁纸
博主头像
GabrielxD

列車は必ず次の駅へ。では舞台は?私たちは?

  • 累计撰写 471 篇文章
  • 累计创建 108 个标签
  • 累计收到 9 条评论

目 录CONTENT

文章目录

【二分查找】猜数字大小

GabrielxD
2022-05-24 / 0 评论 / 0 点赞 / 90 阅读 / 356 字 / 正在检测是否收录...

题目

374. 猜数字大小


猜数字游戏的规则如下:

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

你可以通过调用一个预先定义好的接口 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 <= 2^31 - 1
  • 1 <= pick <= n

解题

方法一:二分查找

思路

使用二分查找(相等返回)。

代码

public class Solution extends GuessGame {
    public int guessNumber(int n) {
        int start = 1, end = n;
        while (start <= end) {
            int mid = start + ((end - start) >> 1);
            switch (guess(mid)) {
                case 0: return mid;
                case 1:
                    start = mid + 1;
                    break;
                case -1:
                    end = mid - 1;
                    break;
            }
        }
        return -1;
    }
}
0

评论区