例如,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。你能解釋一下為什么嗎?
uj5u.com熱心網友回復:
len(sums)//2永遠不能與left (right - left) // 2. 它們是不同的東西。但是,(left right) // 2這可能是您感到困惑的地方。
left (right - left) // 2并且(left right) // 2基本上除了一件事是相同的:后者可以溢位由于這樣的事實,我們首先添加left和right再劃分。整數溢位在 Python 中是不可能的,但在整數大小有限的 C 和 Java 等語言中可能會發生這種情況。
閱讀這篇文章,了解這個錯誤在許多代碼庫中是如何普遍存在的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/366287.html
