Binary Search
1) 是否有duplicates
1.1 如果没有duplicates
标准的binary search:
a) l + 1 < r 相当于如果l, r 相邻就跳出. 但是while loop之后需要加一个判断, 也就是d
b) l + (r - l)//2 # 不用(l+r)//2 , 因为l + r 有可能overflow
c) A[mid] ==, <, > # 为了bug free, 建议举个小栗子, 然后画图去判断.
d) A[l], A[r] ? target
Code
def BinarySearch(self, nums, target): # nums is sorted if target < nums[0] or target > nums[-1]: return -1 l, r = 0, len(nums) -1 while l + 1 < r: mid = l + (r - l)//2 if nums[mid] > target: r = mid elif nums[mid] < target: l = mid else: return mid if nums[l] == target: return l if nums[r] == target: return r return -1
扫描二维码关注公众号,回复:
2936793 查看本文章