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

📅  最后修改于: 2023-12-03 14:51:27.238000             🧑  作者: Mango

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

介绍

在排序数组中搜索K的插入位置是一道经典的二分查找问题。给定一个有序数组和一个目标值K,要求在数组中找到K的插入位置,如果K存在,则返回它的下标;如果K不存在,则返回它应该插入的位置的下标。

思路

本题可以使用二分查找的思想来解决。具体思路如下:

  1. 定义左右指针:left = 0,right = len(nums)-1,其中nums表示给定的排序数组。
  2. 当left <= right时,执行以下步骤:
    • 定义中间指针mid:mid = (left + right) // 2。
    • 若nums[mid] == K,返回mid。
    • 若nums[mid] < K,则K应该在mid右侧,因此更新left = mid + 1。
    • 若nums[mid] > K,则K应该在mid左侧,因此更新right = mid - 1。
  3. 若没有找到K,则返回left。
代码实现
def searchInsert(nums, target):
    left, right = 0, len(nums) - 1
    while left <= right:
        mid = (left + right) // 2
        if nums[mid] == target:
            return mid
        elif nums[mid] < target:
            left = mid + 1
        else:
            right = mid - 1
    return left
测试案例
# 测试样例1
nums1, target1 = [1,3,5,6], 5
assert searchInsert(nums1, target1) == 2

# 测试样例2
nums2, target2 = [1,3,5,6], 2
assert searchInsert(nums2, target2) == 1

# 测试样例3
nums3, target3 = [1,3,5,6], 7
assert searchInsert(nums3, target3) == 4

# 测试样例4
nums4, target4 = [1,3,5,6], 0
assert searchInsert(nums4, target4) == 0
时间复杂度

本题使用二分查找的时间复杂度为O(log n),其中n为数组的长度。因此,本算法的时间复杂度是比较优秀的。