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

383 阅读1分钟

在这里插入图片描述

图解LeetCode刷题计划

1、写在前面

手绘漫画系列正式上线!!!"图解LeetCode刷题计划" 来了!!!

今天是第八期,争取每天一期,最多两天一期,欢迎大家监督我。。。

在这里插入图片描述
最近依旧是二分查找算法呢~

使用新版的模板加上图解,相信你能更加理解二分法的使用!!!

在这里插入图片描述

2、题目

首先看一下题目,

在这里插入图片描述
分界条件就是数字的大小!!!调用 API 就可以实现这个功能,简直是白给。

不过题目写的有点隐晦。。。有人吐槽这题都TM写错了。。。你们是怎么作对的?笑死我了。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、正文

首先分析一下情况,n = 6pick = 2

在这里插入图片描述
确定一下 leftright,然后编写二分查找模板。

可以看到,guess(mid) 时,所以 pickmid 的右侧,因为有等号,所以 left = mid,要注意判断结果,不能只写个 left ,因为是存在 -1 的情况的,价格 if(guess(left)==0) return left; 就好了。

因为是模板二,所以不要忘记给 mid 加1!!!

在这里插入图片描述

4、代码

/** 
 * Forward declaration of guess API.
 * @param  num   your guess
 * @return 	     -1 if num is lower than the guess number
 *			      1 if num is higher than the guess number
 *               otherwise return 0
 * int guess(int num);
 */

int guessNumber(int n){
	int left=0;
    int right=n;
    while(left<right){
        int mid = (long)left + right + 1 >> 1;
        int res=guess(mid);
        if (res >= 0) {
            // 左边界更新为 mid + 1
            left = mid;
        }
        else {
            // 右边界更新为 mid - 1
            right = mid - 1;
        }
    }
    if(guess(left)==0) return left;
    return -1;
}

在这里插入图片描述
在这里插入图片描述

如果有幸帮到你,请帮我点个【赞】,给个【关注】!如果能顺带【评论】给个鼓励,我将不胜感激。

如果想要更多的资源,欢迎关注 @我是管小亮,文字强迫症MAX~