LeetCode题解:猜数字大小
猜数字大小(easy)
更好的阅读体验应该是:
- 审题-思考
- 答题
- 整理-归纳
一、题目
LeetCode:374.猜数字大小
猜数字游戏的规则如下:
每轮游戏,我都会从 1
到 n
随机选择一个数字。 请你猜选出的是哪个数字。
如果你猜错了,我会告诉你,你猜测的数字比我选出的数字是大了还是小了。
你可以通过调用一个预先定义好的接口 guess(num)
来获取猜测结果,返回值一共有 3 种可能的情况(-1,1 或 0):
- -1:我选出的数字比你猜的数字小 pick < num
- 1:我选出的数字比你猜的数字大 pick > num
- 0:我选出的数字和你猜的数字一样。恭喜!你猜对了!pick == num
示例:
输入:n = 10, pick = 6
输出:6
要注意审题哦~
二、二分法解题
二分查找是一种基于比较目标值和数组中间元素的教科书式算法。
- 如果目标值等于中间元素,则找到目标值。
- 如果目标值较小,继续在左侧搜索。
- 如果目标值较大,则继续在右侧搜索。
基础模版
- 确定初始的左右边界:
left
: 0right
: nums.length-1mid
: (left + (right - left) >> 1)
- 如果中间元素值
nums[mid]
< target:证明中间值左侧包括中间值都不符合要求,可以直接排除,left = mid + 1
- 如果中间元素值
nums[mid]
:证明中间值右侧包括中间值都不符合要求,可以直接排除,right = mid - 1
- 如果中间元素值
nums[mid]
= target:直接返回mid
的下标 - 重新定义了左右边界,也需要重新计算中间值,我们需要继续进行范围的排除
- 定义搜索的条件,应该是搜索区间都不为空,即
left <= right
本题与基础模版的区别
- 我们的目标是寻找指定数字
- 判断目标值大小的方法是
guess
,它已经帮我们判断了target > mid
等价于guess(mid)
返回1target < mid
等价于guess(mid)
返回-1target = mid
等价于guess(mid)
返回0
Javasciprt 代码
var guessNumber = function(n) {let left = 0; // 初始左边界let right = n; // 初始右边界while (left <= right) {var mid = left + Math.floor((right - left) / 2); //防止溢出if (guess(mid) === 0) {return mid;} else if (guess(mid) === 1) {// 目标值大于中值,则中间左侧可以抛弃了left = mid + 1;} else {// 目标值小于中值,则中间右侧可以抛弃了right = mid - 1;}}return -1;
};
三、写在最后
本文是二分查找-模版 I 的第四题,歇一歇,我们需要面对的下一题并不是单纯的增序列了,不妨回到二分法的文档去先了解下如何处理它。
如果对你有所帮助不妨给本项目的github 点个 star,这是对我最大的鼓励~
关于我
- 花名:余光
- WX:j565017805
- 沉迷 JS,水平有限,虚心学习中
其他沉淀
- JavaScript 版 LeetCode 题解
- 前端进阶笔记
- CSDN
LeetCode题解:猜数字大小相关推荐
- [Golang]力扣Leetcode - 374. 猜数字大小(二分查找)
[Golang]力扣Leetcode - 374. 猜数字大小(二分查找) 题目:猜数字游戏的规则如下: 每轮游戏,我都会从 1 到 n 随机选择一个数字. 请你猜选出的是哪个数字. 如果你猜错了,我 ...
- Java实现 LeetCode 374 猜数字大小 II
375. 猜数字大小 II 我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字,你来猜我选了哪个数字. 每次你猜错了,我都会告诉你,我选的数字比你的大了或者小了. 然而,当你猜 ...
- LeetCode:374. 猜数字大小
374. 猜数字大小 猜数字游戏的规则如下: 每轮游戏,我都会从 1 到 n 随机选择一个数字. 请你猜选出的是哪个数字. 如果你猜错了,我会告诉你,你猜测的数字比我选出的数字是大了还是小了. 你可以 ...
- Java实现 LeetCode 374 猜数字大小
374. 猜数字大小 我们正在玩一个猜数字游戏. 游戏规则如下: 我从 1 到 n 选择一个数字. 你需要猜我选择了哪个数字. 每次你猜错了,我会告诉你这个数字是大了还是小了. 你调用一个预先定义好的 ...
- LeetCode 374. 猜数字大小(二分查找)
1. 题目 我们正在玩一个猜数字游戏. 游戏规则如下: 我从 1 到 n 选择一个数字. 你需要猜我选择了哪个数字. 每次你猜错了,我会告诉你这个数字是大了还是小了. 你调用一个预先定义好的接口 gu ...
- leetcode - 375. 猜数字大小 II
解题思路:这道题目的意思是我告诉你一个n值,然后我会在1到n之间选一个数字,让你来猜我选了哪个数. 我们需要意识到我们在范围 (1, n)中猜数字的时候,需要考虑最坏情况下的代价.也就是说要算每次都猜 ...
- Leetcode 374.猜数字大小
Time: 20190909 Type: Easy 题目描述 我们正在玩一个猜数字游戏. 游戏规则如下: 我从 1 到 n 选择一个数字. 你需要猜我选择了哪个数字. 每次你猜错了,我会告诉你这个数字 ...
- LeetCode 375. 猜数字大小 II(DP)
文章目录 1. 题目 2. 解题 1. 题目 我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字,你来猜我选了哪个数字. 每次你猜错了,我都会告诉你,我选的数字比你的大了或者小 ...
- 【手绘漫画】图解LeetCode之猜数字大小(LeetCode 374题)
文章目录 图解LeetCode刷题计划 1.写在前面 2.题目 3.正文 4.代码 图解LeetCode刷题计划 1.写在前面 手绘漫画系列正式上线!!!"图解LeetCode刷题计划&qu ...
- Leetcode 375. 猜数字大小 II 解题思路及C++实现
方法一:递归 解题思路: 设置一个dp数组,dp[i][j] 表示从数字 i 到 j ,保证猜中所选数字所需的最小花费. 在数字 i 到 j 之间进行猜测时,我们选择数字 i < k < ...
最新文章
- 华为路由器ospf路由表解读_华为动态路由OSPF实例详解之多区域配置-华为路由器设置...
- 让Windows 7揪出每一个暗中运行程序
- 11.10错题集(7-函数)
- Linux 光盘的挂载和解挂
- JQuery中的 .val()
- dos下操作mysql数据库常用命令
- mysql 启动 修改密码_基础的启动/停止/重启/密码修改MySQL
- sql azure 语法_将SQL工作负载迁移到Microsoft Azure:服务选择
- 波形分析--串口数据
- 使用JMeter测试post请求
- jqprint 分页打印_jQuery打印Html页面自动分页
- linux鼠标选中的内容不能复制,解决vim不能使用鼠标右键复制的问题
- 家庭局域网_玩转Windows 10家庭组,轻松共享局域网资源,人人都可以做到
- 目前医疗大数据面临四大挑战
- ajax获取的数据中包含html代码,执行ajax返回数据中包含的script脚本代码
- 关于c语言程序的重点问题,c语言程序设计题跪求高人的复杂版~慢步不要紧主要是要对~题目:作? 爱问知识人...
- 中鸣循迹机器人_自动循迹机器人控制系统的设计
- linux系统weblogic10.3.6(jar) 下载安装
- vlan的基本指令_华为二层交换机VLAN常用命令
- 哥带你去深圳横岗眼镜城配镜去喽!