题目
Given a sorted array of distinct integers and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.
You must write an algorithm with O(log n)
runtime complexity.
Example 1:
Input: nums = [1,3,5,6], target = 5
Output: 2
Example 2:
Input: nums = [1,3,5,6], target = 2
Output: 1
Example 3:
Input: nums = [1,3,5,6], target = 7
Output: 4
Constraints:
1 <= nums.length <= 10^4
-10^4 <= nums[i] <= 10^4
nums
contains distinct values sorted in ascending order.-10^4 <= target <= 10^4
思路
二分搜索,当目标值比中间值大,则移动左指针至中间值右边的位置,当目标值比中间值小,则移动右指针至中间值的位置,当目标值与中间值相等,则直接返回中间值所在的索引。如此反复直至左右指针相遇,若此时仍未找到目标值,则返回左指针的位置,表示目标值应当插入的位置。
代码
python版本:
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
l,r=0,len(nums)
while l<r:
mid=(l+r)//2
if nums[mid]<target:
l=mid+1
elif nums[mid]>target:
r=mid
else:
return mid
return l