374. 猜數(shù)字大小(Python)

題目

難度:★★☆☆☆
類(lèi)型:數(shù)組

我們正在玩一個(gè)猜數(shù)字游戲。 游戲規(guī)則如下:
我從 1 到 n 選擇一個(gè)數(shù)字。 你需要猜我選擇了哪個(gè)數(shù)字。
每次你猜錯(cuò)了,我會(huì)告訴你這個(gè)數(shù)字是大了還是小了。
你調(diào)用一個(gè)預(yù)先定義好的接口 guess(int num),它會(huì)返回 3 個(gè)可能的結(jié)果(-1,1 或 0):

-1 : 我的數(shù)字比較小
1 : 我的數(shù)字比較大
0 : 恭喜!你猜對(duì)了!

示例

輸入: n = 10, pick = 6
輸出: 6

解答

這道題和【題目278. 第一個(gè)錯(cuò)誤版本】的題意和解法基本相同,這里直接使用二分法進(jìn)行判斷。

class Solution(object):
    def guessNumber(self, n):
        """
        :type n: int
        :rtype: int
        """
        left, right = 0, n                      # 左右指針初始化為搜索范圍兩端
        while left <= right:                    # 指針合法時(shí),執(zhí)行
            mid = left + (right - left) // 2    # 求取中點(diǎn)
            flag = guess(mid)                   # 獲得中點(diǎn)情況
            if flag == 1:                       # 猜小了
                left = mid + 1                  # 拋棄左半部分搜索區(qū)域
            elif flag == -1:                    # 猜搭了
                right = mid - 1                 # 拋棄右半部分搜索區(qū)域
            else:                               # 猜對(duì)了
                return mid                      # 返回

如有疑問(wèn)或建議,歡迎評(píng)論區(qū)留言~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容