一、题目复述
1. 题目
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在与数组中,返回它将会被按顺序插入的位置(必须使用时间复杂度为的算法)。
2. 思路梳理
题目和之前两个很类似,整体思路和二分查找几乎没有区别,先设定左侧下标和右侧下标,再计算中间下标。每次根据和之间的大小进行判断,相等则直接返回下标,则 右移,则 左移。此外,如果大于数组中的所有数,此时需要插入到数组长度的位置。
二、代码实现
class Solution(object):
def searchInsert(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
i = 0
j = len(nums)-1
while i <= j:
m = (i+j) // 2
if nums[m] < target:
i = m+1
elif nums[m] > target:
j = m-1
else:
return m
return j+1 # 根据插入位置输出返回值
三、复盘
和前两题很像,但这题多了个额外的条件,即如果不存在数组中的时候需要返回按顺序插入的位置。其实,主要就是考虑不同的插入位置。