本文主要是介绍LeetCode、374. 猜数字大小【简单,二分】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 前言
- LeetCode、374. 猜数字大小【简单,二分】
- 题目及类型
- 思路及代码实现
- 资料获取
前言
博主介绍:✌目前全网粉丝2W+,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。
涵盖技术内容:Java后端、算法、分布式微服务、中间件、前端、运维、ROS等。
博主所有博客文件目录索引:博客目录索引(持续更新)
视频平台:b站-Coder长路
LeetCode、374. 猜数字大小【简单,二分】
来源:LeetCode专题《LeetCode 75》
题目及类型
题目链接:LeetCode、374. 猜数字大小
类型:基础算法/二分
思路及代码实现
思路:
注意点:对于l + r可能会爆int,我们可以使用一个临时long存储,接着再转为int。
对于猜测的数若是<=目标值,那么区间范围为[l, mid],若是>目标值,区间值范围[mid + 1, r],在本题中由于一定能够命中某一个值,那么最终的结果就一定是l或者r。
代码:
复杂度分析:时间复杂度O(logn);空间复杂度O(1)
/** * Forward declaration of guess API.* @param num your guess* @return -1 if num is higher than the picked number* 1 if num is lower than the picked number* otherwise return 0* int guess(int num);*/
public class Solution extends GuessGame {public int guessNumber(int n) {int l = 1, r = n;while (l < r) {//取到中间值 (long)l + r >> 1 会超时,会构成这样的效果(long)l + (r >> 1)//我们的目的应该是((long)l + r) >> 1long tmp = ((long)l + r) >> 1;//临时使用long存储int mid = (int)tmp;int pick = guess(mid);//若是<=,那么区间为[l, mid],若是> 则为[mid + 1, r]if (pick <= 0) {r = mid;}else {l = mid + 1;}}return l;}
}
资料获取
大家点赞、收藏、关注、评论啦~
精彩专栏推荐订阅:在下方专栏👇🏻
- 长路-文章目录汇总(算法、后端Java、前端、运维技术导航):博主所有博客导航索引汇总
- 开源项目Studio-Vue—校园工作室管理系统(含前后台,SpringBoot+Vue):博主个人独立项目,包含详细部署上线视频,已开源
- 学习与生活-专栏:可以了解博主的学习历程
- 算法专栏:算法收录
更多博客与资料可查看👇🏻获取联系方式👇🏻,🍅文末获取开发资源及更多资源博客获取🍅
整理者:长路 整理时间:2024.1.19
这篇关于LeetCode、374. 猜数字大小【简单,二分】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!