Loading... 二分查找通过不断缩小目标范围,最后找到目标元素或者没有找到目标元素。 ## 二分下标 > 有序数组中的二分查找 > > [Leetcode 374.猜数字大小](https://leetcode.cn/problems/guess-number-higher-or-lower/) 猜数字游戏的规则如下: + 每轮游戏,我都会从 **1** 到 ***n*** 随机选择一个数字。 请你猜选出的是哪个数字。 + 如果你猜错了,我会告诉你,你猜测的数字比我选出的数字是大了还是小了。 你可以通过调用一个预先定义好的接口 `int guess(int num)` 来获取猜测结果,返回值一共有 3 种可能的情况(`-1`,`1` 或 `0`): + \-1:我选出的数字比你猜的数字小 `pick < num` + 1:我选出的数字比你猜的数字大 `pick > num` + 0:我选出的数字和你猜的数字一样。恭喜!你猜对了!`pick == num` 返回我选出的数字。 <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-8ccdb8cab8302047d78c0016fee0602421" aria-expanded="true"><div class="accordion-toggle"><span style="">样例</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-8ccdb8cab8302047d78c0016fee0602421" class="collapse collapse-content"><p></p> **示例 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` <p></p></div></div></div> <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-75c589406999c4f10a0abf3db84a515c60" aria-expanded="true"><div class="accordion-toggle"><span style="">题解</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-75c589406999c4f10a0abf3db84a515c60" class="collapse collapse-content"><p></p> Java ```java public int guessNumber(int n) { int left = 1; int right = n; int res = 0; while (left <= right) { int mid = (left + right) >>> 1; res = guess(mid); if (res == 0) { return mid; } else if (res == 1) { left = mid + 1; } else { right = mid; } } return res; } ``` <p></p></div></div></div> © 允许规范转载 打赏 赞赏作者 微信 赞