【题目描述】

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

你可以假设数组中无重复元素。

示例 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: List[int], target: int) -> int:
if target in nums: #如果target存在于nums中
return nums.index(target)
elif target < nums[0]: #如果target比数组第一个元素小
return 0
elif target > nums[-1]: #如果target比数组最后一个元素大
return len(nums)
else:
for i in range(len(nums)-1):
if nums[i] < target and nums[i+1] > target:
return i+1

  执行用时:54ms

  • 解法二:二分法
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
size=len(nums)
#特判1
if size==0:
return 0
#特判2:如果target大于最后一个元素
if nums[-1]<target:
return size
left=0
right=size-1
#二分法逻辑判断
while left<right:
mid=left+(right-left)//2 #mid=(left+right)//2 但是(left+right)可能会整型溢出,故换一种写法
if nums[mid]<target:
left=mid+1
else:
assert nums[mid] >= target
right=mid
return left

  执行用时:86ms

05-11 13:47
查看更多