代码随想录算法训练营第一|35搜索插入
数组方面的基本都是一次过了,主要是这个搜索插入位置的时候卡顿了一下。
这个插入位置,实际上找的就是最大比target小的数据索引+1,或者是最小比target大的数据索引。
下面的解法是基于找到最大比target小的数据的索引(目标索引) 此时我采用了左闭右闭的写法,
-
出现等于的情况直接跳出
-
目标在右区间,目标索引不会出现在 mid和mid左侧,目前能找到的最大数据是mid,
2.1 尝试left =mid+1是否仍然可以比target大
-
目标在左区间,目标索引不会出现在 mid和mid右侧,right = mid-1
def searchInsert(self, nums: List[int], target: int) -> int:
left,right=0,len(nums)-1
while left<=right:
mid = (left+right)//2
if nums[mid]==target:
return mid
if nums[mid]<target:
left = mid+1
else:
right = mid-1
if right>len(nums):
return right-1
return left