题目:
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
方法一:暴力遍历求解法
顺序遍历整个数组搜索target位置,若nums[i]>target,表示i位置之前的数都小于target,因此数组中没有target,则返回i,i所在的位置就是target应插入的位置。若nums[i]=target,找到target了,直接返回target所在位置i。遍历结束后没有搜索到,则返回数组长度,target应插入的位置则是数组最后。
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
# 顺序查找
for i in range(len(nums)):
if nums[i] >= target:
return i
return len(nums)
方法二:二分法优化求解法
主要就是使用了二分查找法的思想,与普通的二分查找的区别在于,它的target可能不在数组中,这时我们返回的就是目标值的插入位置。
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
left = 0
right = len(nums)-1
while left <= right:
m = (left+right)//2
if target < nums[m]:
right = m-1
elif target > nums[m]:
left = m+1
else:
return m
return right+1
看到力扣里好多题解都是返回left,想了好久还是理解不了,最后按照我个人的理解返回right+1,没想到也是可以的,嘻嘻
大家如果有更好的解法啊或者其他想法的,可以在评论区打出来哦,这样就能一起学习啦。如果觉得我的方法还不错的话,留下一个小小的赞吧!!!