返回
35. 搜索插入位置 - 趣味题解与满分思路剖析
前端
2024-01-22 03:24:24
LeetCode 35. 搜索插入位置
题目 :
给定一个排序数组和一个目标值,在数组中找到目标值并返回其索引。如果目标值不存在,则返回其应插入的位置。
示例 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 = [], target = 0
输出:0
解决思路 :
我们可以利用二分查找算法来高效地解决这个问题。二分查找算法是一种快速查找排序数组中元素的方法,它通过不断地将数组一分为二,缩小查找范围,从而快速地找到目标元素。
二分查找算法的关键在于找到数组的中间元素,并与目标元素进行比较。如果中间元素等于目标元素,则返回中间元素的索引。如果中间元素大于目标元素,则目标元素一定在数组的左半部分;反之,目标元素一定在数组的右半部分。通过不断地将数组一分为二,缩小查找范围,最终可以找到目标元素的索引。
具体步骤 :
- 设置左边界 left 为 0,右边界 right 为 nums.length - 1。
- 计算中间索引 mid = (left + right) / 2。
- 将中间元素 nums[mid] 与目标元素 target 进行比较。
- 如果 nums[mid] 等于 target,则返回 mid。
- 如果 nums[mid] 大于 target,则将 right 更新为 mid - 1,并继续执行步骤 2。
- 如果 nums[mid] 小于 target,则将 left 更新为 mid + 1,并继续执行步骤 2。
- 如果 left 大于 right,则说明 target 不存在于数组中,返回 left。
代码示例 :
def search_insert(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
复杂度分析 :
- 时间复杂度:O(log n),其中 n 为数组的长度。
- 空间复杂度:O(1),因为我们只需要常数个变量来存储中间索引和边界索引。
参考资料 :
我希望这篇博客对您有所帮助。如果您有任何问题或建议,请随时给我留言。