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