图解LeetCode刷题计划
1、写在前面
手绘漫画系列正式上线!!!“图解LeetCode刷题计划” 来了!!!
今天是第八期,争取每天一期,最多两天一期,欢迎大家监督我。。。
最近依旧是二分查找算法呢~
使用新版的模板加上图解,相信你能更加理解二分法的使用!!!
2、题目
首先看一下题目,
分界条件就是数字的大小!!!调用 API 就可以实现这个功能,简直是白给。
不过题目写的有点隐晦。。。有人吐槽这题都TM写错了。。。你们是怎么作对的?笑死我了。
3、正文
首先分析一下情况,n = 6
,pick = 2
。
确定一下 left
和 right
,然后编写二分查找模板。
可以看到,guess(mid)
时,所以 pick
在 mid
的右侧,因为有等号,所以 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~