LeetCode題解:374.猜數字大小

猜數字大小

一、LeetCode題解

瞧一瞧(求star!)

二、算法題

題目

我們正在玩一個猜數字遊戲。 遊戲規則如下:
我從 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
};
結果

在這裏插入圖片描述

關於我

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章