leetcode猜数字大小

本文介绍了在一个猜数字游戏中,作者通过实现的`guessNumber`方法运用二分法技巧,解决玩家在给定范围内猜测数字的问题,虽然算法看似复杂但能在0ms内通过,主要关注点在于处理边界问题和优化搜索过程。
摘要由CSDN通过智能技术生成

猜数字游戏的规则如下:

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

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

  • -1:我选出的数字比你猜的数字小 pick < num
  • 1:我选出的数字比你猜的数字大 pick > num
  • 0:我选出的数字和你猜的数字一样。恭喜!你猜对了!pick == num

返回我选出的数字。、

说实话我也看不懂我的算法,主要是因为边界问题,应该是中位法吧,但是0ms通过了,我想这应该是真二分。

    public int guessNumber(int n) {
        int i = n,j = i;
        while(j > 1){
            int r = guess(i);
            if(r == 0) return i;
            j = (j+1)>>1;
            i = r == 1 ? i + j : i - j;
        }
        return i;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值