猜数字大小 LeetCode刷题笔记 二、思路分析 三、

「这是我参与11月更文挑战的第5天,活动详情查看:2021最后一次更文挑战


  • 相关文章

LeetCode刷题汇总:LeetCode刷题

一、题目描述


猜数字大小

猜数字游戏的规则如下:

每轮游戏,我都会从 1 到 n 随机选择一个数字。 请你猜选出的是哪个数字。 如果你猜错了,我会告诉你,你猜测的数字比我选出的数字是大了还是小了。 你可以通过调用一个预先定义好的接口 int guess(int num) 来获取猜测结果,返回值一共有 3 种可能的情况(-1,1 或 0):

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

二、思路分析


+ 看看题目的示例,我们来理一理这个思路~
+ 示例 1:



1
2
ini复制代码输入:n = 10, pick = 6
输出:6
+ 示例2:
1
2
ini复制代码输入:n = 1, pick = 1
输出:1
+ 示例3: +
1
2
ini复制代码输入:n = 2, pick = 1
输出:1
+ 示例4: +
1
2
ini复制代码输入:n = 2, pick = 2
输出:2
+ 重点是这个,不要被迷惑了! - -1 : 我的数字比较小 - 1 : 我的数字比较大 - 0 : 恭喜!你猜对了! + 这个`-1` 指的是真实的结果比较小,换个说法就是你猜的结果大,不是你猜的小!不要被误导!三、AC 代码

=======


+ 二分法YYDS!



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
ini复制代码public class Solution extends GuessGame{
public int guessNumber(int n){
int low=1,high=n;
while(low<=high){
           //防止mid越界爆掉, /2
int mid=low+(high-low)/2;
           //调用guess
int res=guess(mid);
if(res!=0){
if(res==-1){
high=mid-1;
}else {
low=mid+1;
}
}else{
return mid;
}
}
return 0;
}
}
+ 执行结果: + ![image-20211107202431610.png](https://gitee.com/songjianzaina/juejin_p15/raw/master/img/2ddb42e2118d1e6a52395b867747103af9006b8e6bfaf64786075ab5869c6a59) + 做完之后我又去找了找其他大神们的解法,发现基本上都是使用二分法来解决的,不过他们写的更加简洁明了! + 个人感觉这题就是表达很让人误解,其实最终的目的是让我们尽量少调用 `guess`方法来找到分割点。 + 还有就是`mid`的值,不要越界!可以通过 `/2` 或者直接使用`long`来接收!

路漫漫其修远兮,吾必将上下求索~

如果你认为i博主写的不错!写作不易,请点赞、关注、评论给博主一个鼓励吧~hahah

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%