搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
示例:
输入: nums = [1,3,5,6], target = 5
输出: 2
思路
解法一:
采用左闭右开的方式,分为四种情况
- 目标值在数组所有元素之前
- 目标值等于数组中的某一个元素
- 目标值插入数组中的某个位置
- 目标值在数组所有元素之后
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
left, right = 0, len(nums)
while left < right:
mid = left + (right -left) // 2
if nums[mid] == target: # 找到target,直接返回
return mid
elif nums[mid] < target: # target在右区间[mid + 1, right)
left = mid + 1
else: # target在左区间[left, mid)
right = mid
# 分别处理如下四种情况
# 目标值在数组所有元素之前 [0,0)
# 目标值等于数组中某一个元素 return middle,即right
# 目标值插入数组中的位置 [left, right) ,return right 即可
# 目标值在数组所有元素之后的情况 [left, right),return right 即可
return right