1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| """ 题目描述: 给定数组nums = [1, 3, 6, 8, 9, 12, 16, 19, 20]
target = 6 若数组中包含target,则返回数组下标,否则返回-1 """
def binary_search_1(nums, target): """左闭右闭区间的二分搜索写法""" left, right = 0, len(nums) - 1
while left <= right: middle = left + (right - left) // 2
if nums[middle] > target: right = middle - 1 elif nums[middle] < target: left = middle + 1 else: return middle return -1
def binary_search_2(nums, target): """左闭右开区间的写法""" left, right = 0, len(nums)
while left < right: middle = left + (right - left) // 2
if nums[middle] > target: right = middle elif nums[middle] < target: left = middle + 1 else: return middle return -1
if __name__ == "__main__": nums = [1, 3, 6, 8, 9, 12, 16, 19, 20] target = 6 nums.sort()
print(binary_search_1(nums, target)) print(binary_search_2(nums, target))
""" 输出结果为: 2 2 """
|