题目
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
思路
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
if len(nums) == 0 or nums[0] > target:
return 0
for i, num in enumerate(nums):
if num > target:
return i
elif num == target:
return i
return len(nums)
时间复杂度:O(n)
不高效,看到数组是有序的,应该想想到用二分法。
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
if len(nums) == 0 or nums[0] > target:
return 0
left, right = 0, len(nums) - 1
while left + 1 < right:
mid = left + (right - left) // 2
if nums[mid] == target:
return mid
elif nums[mid] > target:
right = mid - 1
else:
left = mid + 1
if nums[left] >= target:
return left
elif nums[right] >= target:
return right
else:
return right + 1