圖解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~