📜  在排序数组中搜索K的插入位置(1)

📅  最后修改于: 2023-12-03 15:23:33.248000             🧑  作者: Mango

在排序数组中搜索K的插入位置

在排序数组中搜索一个目标值 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

以上两种方法都是比较常见的解法,其中二分查找是最优解法。