LeetCode、374. 猜数字大小【简单,二分】

发布时间:2024年01月20日

前言

博主介绍:?目前全网粉丝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) >> 1
            long 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;
    }
}

image-20240119203721836


资料获取

大家点赞、收藏、关注、评论啦~

精彩专栏推荐订阅:在下方专栏👇🏻

更多博客与资料可查看👇🏻获取联系方式👇🏻,🍅文末获取开发资源及更多资源博客获取🍅


整理者:长路 整理时间:2024.1.19

文章来源:https://blog.csdn.net/cl939974883/article/details/135708359
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。