猜数字大小(easy)

更好的阅读体验应该是:

  1. 审题-思考
  2. 答题
  3. 整理-归纳

一、题目

LeetCode:374.猜数字大小

猜数字游戏的规则如下:

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

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

示例:

输入:n = 10, pick = 6
输出:6

要注意审题哦~

二、二分法解题

二分查找是一种基于比较目标值和数组中间元素的教科书式算法。

  • 如果目标值等于中间元素,则找到目标值。
  • 如果目标值较小,继续在左侧搜索。
  • 如果目标值较大,则继续在右侧搜索。

基础模版

  1. 确定初始的左右边界:

    • left: 0
    • right: nums.length-1
    • mid: (left + (right - left) >> 1)
  2. 如果中间元素值nums[mid] < target:证明中间值左侧包括中间值都不符合要求,可以直接排除,left = mid + 1
  3. 如果中间元素值nums[mid]:证明中间值右侧包括中间值都不符合要求,可以直接排除,right = mid - 1
  4. 如果中间元素值nums[mid] = target:直接返回mid的下标
  5. 重新定义了左右边界,也需要重新计算中间值,我们需要继续进行范围的排除
  6. 定义搜索的条件,应该是搜索区间都不为空,即left <= right

本题与基础模版的区别

  • 我们的目标是寻找指定数字
  • 判断目标值大小的方法是guess,它已经帮我们判断了
    • target > mid 等价于 guess(mid)返回1
    • target < mid 等价于 guess(mid)返回-1
    • target = 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题解:猜数字大小相关推荐

  1. [Golang]力扣Leetcode - 374. 猜数字大小(二分查找)

    [Golang]力扣Leetcode - 374. 猜数字大小(二分查找) 题目:猜数字游戏的规则如下: 每轮游戏,我都会从 1 到 n 随机选择一个数字. 请你猜选出的是哪个数字. 如果你猜错了,我 ...

  2. Java实现 LeetCode 374 猜数字大小 II

    375. 猜数字大小 II 我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字,你来猜我选了哪个数字. 每次你猜错了,我都会告诉你,我选的数字比你的大了或者小了. 然而,当你猜 ...

  3. LeetCode:374. 猜数字大小

    374. 猜数字大小 猜数字游戏的规则如下: 每轮游戏,我都会从 1 到 n 随机选择一个数字. 请你猜选出的是哪个数字. 如果你猜错了,我会告诉你,你猜测的数字比我选出的数字是大了还是小了. 你可以 ...

  4. Java实现 LeetCode 374 猜数字大小

    374. 猜数字大小 我们正在玩一个猜数字游戏. 游戏规则如下: 我从 1 到 n 选择一个数字. 你需要猜我选择了哪个数字. 每次你猜错了,我会告诉你这个数字是大了还是小了. 你调用一个预先定义好的 ...

  5. LeetCode 374. 猜数字大小(二分查找)

    1. 题目 我们正在玩一个猜数字游戏. 游戏规则如下: 我从 1 到 n 选择一个数字. 你需要猜我选择了哪个数字. 每次你猜错了,我会告诉你这个数字是大了还是小了. 你调用一个预先定义好的接口 gu ...

  6. leetcode - 375. 猜数字大小 II

    解题思路:这道题目的意思是我告诉你一个n值,然后我会在1到n之间选一个数字,让你来猜我选了哪个数. 我们需要意识到我们在范围 (1, n)中猜数字的时候,需要考虑最坏情况下的代价.也就是说要算每次都猜 ...

  7. Leetcode 374.猜数字大小

    Time: 20190909 Type: Easy 题目描述 我们正在玩一个猜数字游戏. 游戏规则如下: 我从 1 到 n 选择一个数字. 你需要猜我选择了哪个数字. 每次你猜错了,我会告诉你这个数字 ...

  8. LeetCode 375. 猜数字大小 II(DP)

    文章目录 1. 题目 2. 解题 1. 题目 我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字,你来猜我选了哪个数字. 每次你猜错了,我都会告诉你,我选的数字比你的大了或者小 ...

  9. 【手绘漫画】图解LeetCode之猜数字大小(LeetCode 374题)

    文章目录 图解LeetCode刷题计划 1.写在前面 2.题目 3.正文 4.代码 图解LeetCode刷题计划 1.写在前面 手绘漫画系列正式上线!!!"图解LeetCode刷题计划&qu ...

  10. Leetcode 375. 猜数字大小 II 解题思路及C++实现

    方法一:递归 解题思路: 设置一个dp数组,dp[i][j] 表示从数字 i 到 j ,保证猜中所选数字所需的最小花费. 在数字 i 到 j 之间进行猜测时,我们选择数字 i < k < ...

最新文章

  1. 华为路由器ospf路由表解读_华为动态路由OSPF实例详解之多区域配置-华为路由器设置...
  2. 让Windows 7揪出每一个暗中运行程序
  3. 11.10错题集(7-函数)
  4. Linux 光盘的挂载和解挂
  5. JQuery中的 .val()
  6. dos下操作mysql数据库常用命令
  7. mysql 启动 修改密码_基础的启动/停止/重启/密码修改MySQL
  8. sql azure 语法_将SQL工作负载迁移到Microsoft Azure:服务选择
  9. 波形分析--串口数据
  10. 使用JMeter测试post请求
  11. jqprint 分页打印_jQuery打印Html页面自动分页
  12. linux鼠标选中的内容不能复制,解决vim不能使用鼠标右键复制的问题
  13. 家庭局域网_玩转Windows 10家庭组,轻松共享局域网资源,人人都可以做到
  14. 目前医疗大数据面临四大挑战
  15. ajax获取的数据中包含html代码,执行ajax返回数据中包含的script脚本代码
  16. 关于c语言程序的重点问题,c语言程序设计题跪求高人的复杂版~慢步不要紧主要是要对~题目:作? 爱问知识人...
  17. 中鸣循迹机器人_自动循迹机器人控制系统的设计
  18. linux系统weblogic10.3.6(jar) 下载安装
  19. vlan的基本指令_华为二层交换机VLAN常用命令
  20. 哥带你去深圳横岗眼镜城配镜去喽!

热门文章

  1. 对角化求可逆矩阵_矩阵对角化方法
  2. Java夜未眠(蔡学镛)
  3. 蔡学镛:架构师最重视的文档 转
  4. Mini USB针脚定义
  5. wav格式转换成mp3,wav转mp3教程
  6. DoEvents应用
  7. 基于微信小程序的毕业设计题目(19)php菜谱美食小程序(含开题报告、任务书、中期报告、答辩PPT、论文模板)
  8. python3爬虫(2):使用Selenium爬取百度文库word文章
  9. caffe框架学习(layer)
  10. AH8063,输入6.6V-30V,4A大电流,三节锂电池充电管理芯片iC