返回
解剖 LeetCode 374 猜数字大小:二分搜索的巧妙运用
见解分享
2023-11-29 22:45:25
踏入谜题世界:LeetCode 374 猜数字大小
LeetCode 374 猜数字大小的问题背景如下:
假设你有一个函数 guess(int num),它会返回 3 个可能的整数之一:
-1:如果你的猜测数字比目标数字小
1:如果你的猜测数字比目标数字大
0:如果你猜中了目标数字
在不调用 guess 函数超过 n 次的前提下,找出目标数字。
这道题考验了我们解决问题的能力,要求我们利用有限的猜测次数找出隐藏的目标数字。而二分搜索算法恰好能满足这一需求。
二分搜索:庖丁解牛之术
二分搜索算法是一种高效的搜索算法,它适用于已排序的数组。其基本原理是将搜索范围不断缩小,每次猜测中间位置的元素,根据猜想结果将搜索范围缩小到一半。
在 LeetCode 374 中,我们可以将猜测的数字范围定义为 [1, n],其中 n 是允许的最大猜测次数。然后,我们可以使用以下步骤进行二分搜索:
- 初始化左右边界:left = 1,right = n。
- 计算中间位置:mid = (left + right) // 2。
- 调用 guess(mid) 函数,得到猜测结果。
- 根据猜测结果更新边界:
- 如果 guess(mid) == 0,则找到了目标数字,返回 mid。
- 如果 guess(mid) == -1,则目标数字在 [left, mid-1] 范围内,更新 right = mid - 1。
- 如果 guess(mid) == 1,则目标数字在 [mid+1, right] 范围内,更新 left = mid + 1。
- 重复步骤 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 猜数字大小,我们深入理解了二分搜索算法在解决问题中的强大作用。掌握二分搜索算法是算法工程师必备技能之一,它广泛应用于各种编程任务和面试场景。通过这篇文章,希望你能对二分搜索算法有更深入的认识,为你的编程之旅增添利器。