返回

解剖 LeetCode 374 猜数字大小:二分搜索的巧妙运用

见解分享

踏入谜题世界:LeetCode 374 猜数字大小

LeetCode 374 猜数字大小的问题背景如下:

假设你有一个函数 guess(int num),它会返回 3 个可能的整数之一:

-1:如果你的猜测数字比目标数字小
1:如果你的猜测数字比目标数字大
0:如果你猜中了目标数字

在不调用 guess 函数超过 n 次的前提下,找出目标数字。

这道题考验了我们解决问题的能力,要求我们利用有限的猜测次数找出隐藏的目标数字。而二分搜索算法恰好能满足这一需求。

二分搜索:庖丁解牛之术

二分搜索算法是一种高效的搜索算法,它适用于已排序的数组。其基本原理是将搜索范围不断缩小,每次猜测中间位置的元素,根据猜想结果将搜索范围缩小到一半。

在 LeetCode 374 中,我们可以将猜测的数字范围定义为 [1, n],其中 n 是允许的最大猜测次数。然后,我们可以使用以下步骤进行二分搜索:

  1. 初始化左右边界:left = 1,right = n。
  2. 计算中间位置:mid = (left + right) // 2。
  3. 调用 guess(mid) 函数,得到猜测结果。
  4. 根据猜测结果更新边界:
    • 如果 guess(mid) == 0,则找到了目标数字,返回 mid。
    • 如果 guess(mid) == -1,则目标数字在 [left, mid-1] 范围内,更新 right = mid - 1。
    • 如果 guess(mid) == 1,则目标数字在 [mid+1, right] 范围内,更新 left = mid + 1。
  5. 重复步骤 2-4,直到 left >= right。

实现:将理论付诸实践

Python 代码实现如下:

def guessNumber(n: int) -> int:
  left, right = 1, n
  
  while left <= right:
    mid = (left + right) // 2
    result = guess(mid)
    
    if result == 0:
      return mid
    elif result == -1:
      right = mid - 1
    else:
      left = mid + 1
  
  return -1

结语

通过剖析 LeetCode 374 猜数字大小,我们深入理解了二分搜索算法在解决问题中的强大作用。掌握二分搜索算法是算法工程师必备技能之一,它广泛应用于各种编程任务和面试场景。通过这篇文章,希望你能对二分搜索算法有更深入的认识,为你的编程之旅增添利器。