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;}