给定一个排序数组nums和一个目标值target,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。nums为无重复元素的升序排列数组。请必须使用时间复杂度为 O(log n) 的算法。写出详细代码
时间: 2024-12-12 09:27:54 浏览: 16
两数之和:在该数组中找出和为目标值的那两个整数,并返回他们的数组下标
这是一个二分查找的问题,可以使用二分搜索法(Binary Search)解决,因为给定的数组已经是有序的。二分查找的时间复杂度是 O(log n),非常适合在这种情况下寻找元素或确定插入位置。
以下是 Python 语言的代码示例:
```python
def search_insert(nums, target):
left, right = 0, len(nums) - 1
# 如果目标值小于数组的第一个元素,应该插入在左边界
if nums[left] > target:
return 0
# 如果目标值大于数组的最后一个元素,应该插入在右边界
elif nums[right] < target:
return right + 1
# 对于其他情况,从中间开始进行比较
else:
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
```
在这个函数中,我们不断将搜索范围缩小到中间部分,直到找到目标值或者搜索范围变为空,此时返回的 `left` 或 `right` 就代表了目标值应该插入的位置。
阅读全文