给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
示例 1:
输入: nums = [1,3,5,6], target = 5
输出: 2
示例 2:
输入: nums = [1,3,5,6], target = 2
输出: 1
示例 3:
输入: nums = [1,3,5,6], target = 7
输出: 4
示例 4:
输入: nums = [1,3,5,6], target = 0
输出: 0
示例 5:
输入: nums = [1], target = 0
输出: 0
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
length = len(nums)
if nums[0]>=target:
return 0
if nums[-1]<target:
return length
index = int(length/2)
start,end = 0,length-1
while(end-start > 1):
if nums[index] == target:
return index
elif nums[index] > target:
end = index
else:
start = index
index = int((start+end+1)/2)
#if nums[start] < target:
# index = end
return index
方法也是很朴素的二分法
写代码存在的问题包括
- 没有考虑target小于第一个数和大于第一个数的情况
- target在nums中有相同数时需要替换该数字的位置
因为代码还是比较冗杂,leecode结果如下:
执行结果: 通过
执行用时: 28 ms
在所有 Python3 提交中击败了90.63% 的用户
内存消耗:15.5 MB
在所有 Python3 提交中击败14.07% 的用户
通过测试用例: 64 / 64