给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 1:
输入: [1,3,5,6], 5 输出: 2
示例 2:
输入: [1,3,5,6], 2 输出: 1
示例 3:
输入: [1,3,5,6], 7 输出: 4
示例 4:
输入: [1,3,5,6], 0 输出: 0
简单题,直接遍历判断即可,若存在小于等于列表中的某数,直接此数返回索引。
class Solution:
def searchInsert(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
for i in range(len(nums)):
if nums[i]>=target:
return i
return len(nums)
解法二:python内置函数,意义不大。
class Solution:
def searchInsert(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
if target not in nums:
nums.append(target)
nums.sort()
return nums.index(target)
解法三:
既然是有序列表,就会想到二分查找。平均时间复杂度lg(n),这里主要需要考虑查找失败时的return的值,将下标为mid的值与target对比,target大则需返回mid+1。
class Solution:
def searchInsert(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
high=0
low=len(nums)-1
if target>nums[low]:
return low+1
if target<nums[high]:
return 0
while high<=low:
mid=(high+low)//2
if nums[mid]==target:
return mid
if nums[mid]>target:
low=mid-1
else:
high=mid+1
return mid if nums[mid]>target else mid+1