题目

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
image.png

思路

  1. class Solution:
  2. def searchInsert(self, nums: List[int], target: int) -> int:
  3. if len(nums) == 0 or nums[0] > target:
  4. return 0
  5. for i, num in enumerate(nums):
  6. if num > target:
  7. return i
  8. elif num == target:
  9. return i
  10. return len(nums)

时间复杂度:O(n)

不高效,看到数组是有序的,应该想想到用二分法。

  1. class Solution:
  2. def searchInsert(self, nums: List[int], target: int) -> int:
  3. if len(nums) == 0 or nums[0] > target:
  4. return 0
  5. left, right = 0, len(nums) - 1
  6. while left + 1 < right:
  7. mid = left + (right - left) // 2
  8. if nums[mid] == target:
  9. return mid
  10. elif nums[mid] > target:
  11. right = mid - 1
  12. else:
  13. left = mid + 1
  14. if nums[left] >= target:
  15. return left
  16. elif nums[right] >= target:
  17. return right
  18. else:
  19. return right + 1