文章目录
1.1 ⭐算法原理
二分查找原理:将数组分成两半,如果目标值小于数组中间的元素,则在左半部分继续搜索,否则在右半部分搜索,直到找到目标值或者搜索区间为空
*数组下标都是从0开始的。
*数组内存空间的地址是连续的
因为数组的在内存空间的地址是连续的,所以我们在删除或者增添元素的时候,就难免要移动其他元素的地址。
1.2 🦊二分查找示例
示例 1:
输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4
def search(nums, target):
left, right = 0, len(nums) - 1 # left = 0, right = len(nums) - 1
while left <= right:
mid = (left + right) // 2 # 整除符号“//”可以保证结果为整数,而不是浮点数
if nums[mid] == target:
return mid
elif nums[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
执行步骤:
① 左端点为0,右端点为5:left=0,right=5
② 计算中间元素的下标mid,由于left和right的和是偶数,所以mid有两种可能,我们选择左边的那个作为mid:mid=2。(对mid=2.5取整)
③ 发现nums[mid]=3 < target=9,所以目标值可能在mid的右边
④ 于是我们将搜索区间缩小为右半部分,即将左端点left设置为mid+1,变为left=mid+1=3,右端点right不变,仍为5
⑤ 我们再次计算中间元素的下标mid,由于left和right的和是奇数,所以mid只有一种可能,mid=4
⑥ 我们比较mid处的元素nums[mid]与目标值target的大小,发现nums[mid]=9等于目标值target,因此找到了目标值,返回mid=4