二分查找的变种,注意循环退出的条件:
- 找到此数,返回下标
- 此数可能位于两个数字之间,所以while left<right-1:
class Solution:
def searchInsert(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
n=len(nums)
left,right=0,n
if target<=nums[0]:return 0
if target>nums[-1]:return n
while left<right-1:
mid=left+(right-left)//2
if nums[mid]==target: return mid
elif nums[mid]>target: right=mid
else: left=mid
if nums[left]<target:
return left+1
else:
return left