【发布时间】:2019-09-10 13:59:06
【问题描述】:
我正在使用二分搜索解决问题,当我看到在某些地方人们使用 while start < end 时感到困惑,但在算法中我的理解是它应该是 while start <= end。
例如,这里是 Leetcode 问题的解决方案Find Smallest Letter Greater Than Target:
def nextGreatestLetter (self, letters: List[str], target: str) -> str:
l, r = 0, len(letters)-1
# cross the border
if target >= letters[-1]:
return letters[0]
while l < r:
mid = (l+r)//2
if letters[mid] <= target:
l = mid+1
else:
r = mid
return letters[l]
为什么我们没有减少r = mid - 1,为什么没有while l <= r?
我真的很困惑。
【问题讨论】:
-
欢迎来到 SO!我写了一个答案,但我的电脑在我发布之前崩溃了。 TL;DR 刚刚阅读en.wikipedia.org/wiki/Binary_search_algorithm。第一部分展示了“经典”二分搜索算法,然后对其进行了修改以使其基本达到此处所示的状态,并说明理由。
标签: binary-search