在有序数组nums中查找一个数字x,顺序查找的方法是将数组nums中的元素一个一个与x进行比较,时间复杂度为O(n)。
二分查找的主要思想是:充分利用数组nums已经排好序的特点,我们取数组nums的中间位置(mid)的元素n_1,用n_1与目标数字x进行比较,如果n_1 等于x,那么直接返回n_1的位置mid;如果n_1大于x,则说明x如果在数组中的话,一定是在n_1的左侧;如果n_1小于x,则说明x如果在数组中的话,一定是在n_1的右侧。
那我们只要重复上面的步骤就可以找到目标数字x在数组nums中的位置(或不存在nums中)
def BinarySearch(nums: list, x: int) -> int:
left, right = 0, len(nums)-1
while left <= right:
mid = (left+right)//2
if nums[mid] == x:
return mid
if nums[mid] < x:
left = mid+1
else:
right = mid-1