猜數字大小
一、LeetCode題解
瞧一瞧(求star!)
- LeetCode題解Javascript版本:Gitbook版本傳送門
- LeetCode題解Javascript版本:CSDN傳送門
- 前端進階筆記:Gitbook傳送門
二、算法題
題目
我們正在玩一個猜數字遊戲。 遊戲規則如下:
我從 1 到 n 選擇一個數字。 你需要猜我選擇了哪個數字。
每次你猜錯了,我會告訴你這個數字是大了還是小了。
你調用一個預先定義好的接口 guess(int num),它會返回 3 個可能的結果(-1,1 或 0):
-1 : 我的數字比較小
1 : 我的數字比較大
0 : 恭喜!你猜對了!
示例 :
輸入: n = 10, pick = 6
輸出: 6
解法一 (暴力)
思路
- 循環遍歷整個數據
- 時間複雜度O(n)
代碼
var guessNumber = function(n) {
for(let i = 1; i < n; i++){
if(guess(i) === 0) return i
}
return n
};
解法二(二分查找)
思路
- 利用set存儲數組中出現的不重複的數字
[ (a+b+c) * 3 - (a+a+a+b+b+b+c) ] / 2 = c
代碼
var guessNumber = function(n) {
let left = 1;
let right = n;
let mid;
while(left <= right){
mid = parseInt((left + right)/2);
if(guess(mid) === 0){
break
}else if(guess(mid) === 1){
left = mid + 1;
}else if(guess(mid) === -1){
right = mid-1;
}
}
return mid
};
結果
關於我
- decs: 19年畢業的前端開發一枚,沉迷Js
- E-mail: [email protected]
- 個人博客: CSDN
- GitHub: 傳送門