📅  最后修改于: 2023-12-03 14:51:27.224000             🧑  作者: Mango
给定一个升序排列的整数数组 nums 和一个目标值 target,找到 target 在 nums 中的插入位置,使得将target插入到数组中后,数组仍然保持有序。如果数组中已经存在该目标值,则返回它的下标。
示例 1:
输入:nums = [1,3,5,6], target = 5 输出:2
示例 2:
输入:nums = [1,3,5,6], target = 2 输出:1
示例 3:
输入:nums = [1,3,5,6], target = 7 输出:4
示例 4:
输入:nums = [1,3,5,6], target = 0 输出:0
示例 5:
输入:nums = [1], target = 0 输出:0
这道题可以使用二分查找的方法,来定位目标值的插入位置。具体步骤如下:
def searchInsert(nums, target):
left, right = 0, len(nums) - 1
if target <= nums[0]:
return 0
elif target > nums[-1]:
return len(nums)
while left <= right:
mid = (left + right) // 2
if target == nums[mid]:
return mid
elif target < nums[mid]:
right = mid - 1
else:
left = mid + 1
return left
时间复杂度:$O(log_n)$,其中 n 是数组的长度。二分查找的时间复杂度为 $O(log_n)$。
空间复杂度:$O(1)$,没有使用额外的空间。