1 题目描述
2 解题思路
2.1 二分查找左边界
我们把问题想成“大于等于target的第一个数”,那么也就是寻找左侧边界的二分搜索。(见二分查找详解_刘文巾的博客-CSDN博客 的第3小节)
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
left=0
right=len(nums)
while(left<right):
mid=left+(right-left)//2
if(nums[mid]==target):
right=mid
elif(nums[mid]>target):
right=mid
elif(nums[mid]<target):
left=mid+1
return(left)
2.2 搜索空间长度为1时的特判
这种方法大体上和二分查找一个数是一样的(见二分查找详解_刘文巾的博客-CSDN博客 第2小节)
唯一不同的是,查找一个数,如果找不到的话,那么返回0,但这边我们要返回的是插入的位置
那么可能是left,可能是right,应该是哪个呢?
我们看最后搜索空间中只有一个数的情况(因为多于一个数的搜索空间,如果没有target的话,最终也会来到只有一个数的搜索空间中去)
所以如果找不到target,返回的应该是left