📅  最后修改于: 2023-12-03 15:23:33.248000             🧑  作者: Mango
在排序数组中搜索一个目标值 K,并返回其将要被插入的位置的下标,也就是 K 插入数组中的位置。
若数组中已存在该数,则返回它的索引;若不存在,则返回它将会被插入的位置的索引。
直接遍历整个数组,如果找到了目标值,则返回其索引;如果遍历完整个数组还没有找到目标值,则返回插入位置的索引(即 i)。
时间复杂度:O(n),其中 n 为数组的长度。
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
for i in range(len(nums)):
if nums[i] >= target:
return i
return len(nums)
由于数组已经排好序,所以可以使用二分查找来加快搜索速度。具体思路为:设置左右指针,每次将中间位置与目标值进行比较,如果相等,则返回中间位置;如果中间位置的值比 target 大,则将右指针移动到中间位置左边一位,继续查找;如果中间位置的值比 target 小,则将左指针移动到中间位置右边一位,继续查找。如果最终没有找到目标值,根据题目要求返回左指针的位置即可。
时间复杂度:O(log n),其中 n 为数组的长度。
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
left, right = 0, len(nums) - 1
while left <= right:
mid = left + (right - left) // 2
if nums[mid] == target:
return mid
elif nums[mid] < target:
left = mid + 1
else:
right = mid - 1
return left
以上两种方法都是比较常见的解法,其中二分查找是最优解法。