[LeetCode] questions conclusion_ Binary Search

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 查看本文章

猜你喜欢

转载自www.cnblogs.com/Johnsonxiong/p/9552060.html