↓快轉到主要內容
  1. LeetCode/

LeetCode 374: Guess Number Higher or Lower

·1 分鐘· ·
LeetCode Easy Binary-Search Interactive
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: easy 第一次嘗試:2022-08-23

  • 提交紀錄:Accepted ×4

解題思路
#

標準的二分搜尋(Binary Search 模板一),只是比較換成呼叫 guess:回傳 -1 代表我的數字比答案大,往左;1 代表比答案小,往右;0 就猜中了。

我的解法
#

class Solution:
    def guessNumber(self, n: int) -> int:
        l, r = 1, n
        while True:
            mid = (l + r) // 2
            g = guess(mid)
            if g == 0:
                return mid
            if g < 0:
                r = mid - 1
            else:
                l = mid + 1

複雜度
#

時間 O(log n),空間 O(1)。

要特別避免的錯誤
#

  • guess 回傳的是「我猜的數字相對答案」的方向,-1 是猜太大。

面試口說整理
#

我在 1 到 n 之間二分,依照 guess 的回傳值決定往左還是往右,回傳 0 就是答案。時間 O(log n)。

相關文章

LeetCode 278: First Bad Version
·1 分鐘
LeetCode Easy Binary-Search Interactive
LeetCode 278 解題筆記:找第一個 isBadVersion 為 True 的版本,lower bound 二分;呼叫 API 的次數是 O(log n)
LeetCode 349: Intersection of Two Arrays
·1 分鐘
LeetCode Easy Array Hash-Table Two-Pointers Binary-Search
LeetCode 349 解題筆記:兩個陣列各轉成集合取交集
LeetCode 350: Intersection of Two Arrays II
·1 分鐘
LeetCode Easy Array Hash-Table Two-Pointers Binary-Search
LeetCode 350 解題筆記:保留重複次數的交集,Counter 相交(&)取兩邊次數的較小值
LeetCode 268: Missing Number
·1 分鐘
LeetCode Easy Array Hash-Table Math Binary-Search
LeetCode 268 解題筆記:0 到 n 的總和減掉陣列總和就是缺的那個;缺的可能是 0
LeetCode 367: Valid Perfect Square
·1 分鐘
LeetCode Easy Math Binary-Search
LeetCode 367 解題筆記:在 [1, num] 上二分找 mid² == num,不用 sqrt
LeetCode 69: Sqrt(x)
·1 分鐘
LeetCode Easy Math Binary-Search Newtons-Method
LeetCode 69 解題筆記:找最大的 mid 讓 mid² <= x;閉區間二分結束時 r 就是答案