灵感来源
- 保持更新,努力学习
- python脚本学习
搜索插入位置
解题思路
因为数组是有序的,所以可以使用二分查找来解决这个问题。二分查找的基本思想是将数组分成两部分,然后根据目标值与中间元素的大小关系,缩小查找范围,直到找到目标值或者确定插入位置。
具体步骤如下:
- 初始化两个指针
left
和right
,分别指向数组的起始位置和结束位置。 - 进入循环,当
left <= right
时,执行以下操作:- 计算中间位置
mid
。 - 如果中间元素等于目标值,直接返回
mid
。 - 如果中间元素大于目标值,说明目标值在左半部分,更新
right = mid - 1
。 - 如果中间元素小于目标值,说明目标值在右半部分,更新
left = mid + 1
。
- 计算中间位置
- 循环结束后,
left
就是目标值应该插入的位置,返回left
。def searchInsert(nums, target): left, right = 0, len(nums) - 1 while left <= right: mid = left + (right - left) // 2 if nums[mid] == target: return mid elif nums[mid] > target: right = mid - 1 else: left = mid + 1 return left
逐行解释
def searchInsert(nums, target):
# 初始化左指针,指向数组的起始位置
left, right = 0, len(nums) - 1
# 当左指针小于等于右指针时,持续进行循环查找
while left <= right:
# 计算中间位置,避免使用(left + right) // 2 防止整数溢出
mid = left + (right - left) // 2
# 如果中间位置的元素等于目标值,直接返回中间位置的索引
if nums[mid] == target:
return mid
# 如果中间位置的元素大于目标值,说明目标值在左半部分,更新右指针
elif nums[mid] > target:
right = mid - 1
# 如果中间位置的元素小于目标值,说明目标值在右半部分,更新左指针
else:
left = mid + 1
# 循环结束后,left 即为目标值应该插入的位置
return left