【发布时间】:2022-01-04 04:05:35
【问题描述】:
例如 Python 中的基本二分搜索:
left, right = 0, len(nums) - 1
while left <= right:
# // 2 -> floor
pivot = left + (right - left) // 2
if nums[pivot] == target:
return pivot
if target < nums[pivot]:
right = pivot - 1
else:
left = pivot + 1
在这段代码中,pivot 是left + (right - left) // 2,而不是len(nums) // 2。
你能解释一下为什么吗?
【问题讨论】:
-
如果使用
len(nums) // 2,算法是否仍然有效? -
len(nums)是一个常量,当left和/或right改变时它永远不会改变。 -
我要问的是,我不知道为什么在决定支点时使用
left + (right - left) //2的方法。与len(nums) // 2相比,选择枢轴有什么优势吗? -
假设
len(nums)是100和left=60,right=70。在这种情况下,len(nums) // 2位于范围之外,而left + (right-left) // 2是65;正如预期的那样,就在中间。
标签: python algorithm binary-search