循環條件: l <= r
縮減搜索空間: l = mid + 1, r = mid - 1
循環條件: l < r
縮減搜索空間: l = mid, r = mid - 1 或者 l = mid + 1, r = mid
循環條件: l < r - 1
縮減搜索空間: l = mid, r = mid
Template: [l, r)
def binary_search(l, r):
while l < r:
m = l + (r - l) / 2
if f(m): return m # optional
if g(m):
r = m # new range [l, m)
else:
l = m + 1 # new range [m+1, r)
return l # or not found