返回
巅峰对决:LeetCode 35 搜索插入位置(数组、简单)
前端
2023-09-09 06:31:43
前言:LeetCode 数组类型题目的相关解法
关于 LeetCode 数组类型题目的相关解法,可见LeetCode 数组类型题目做前必看,分类别解法总结了题目,可以用来单项提高。觉得有帮助的话,记得多多点赞关注哦,感谢!
题目给定一个排序数组和一个目标值,在数组中找到目标值并返回其索引。如果目标值不存在于数组中,则返回它将会被按顺序插入的位置。
请注意:
- 你可以假设数组中无重复元素。
- 你可以假设给定的目标值总是在数组中的某个位置上。
示例 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
思路分析:
本题考察的是二分查找算法的应用。二分查找算法是一种高效的搜索算法,它通过将数组划分为两半,并比较目标值与数组中间元素的值来缩小搜索范围,从而快速找到目标值。
具体步骤如下:
- 首先,将数组划分为两半,并找到数组的中间元素。
- 将目标值与中间元素的值进行比较。
- 如果目标值等于中间元素的值,则返回中间元素的索引。
- 如果目标值小于中间元素的值,则将数组的上半部分划分为两半,并重复步骤 1-3。
- 如果目标值大于中间元素的值,则将数组的下半部分划分为两半,并重复步骤 1-3。
代码实现:
def search_insert(nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
# 二分查找算法
left, right = 0, len(nums) - 1
while left <= right:
# 计算中间元素的索引
mid = (left + right) // 2
# 如果目标值等于中间元素的值,则返回中间元素的索引
if nums[mid] == target:
return mid
# 如果目标值小于中间元素的值,则将数组的上半部分划分为两半
elif nums[mid] > target:
right = mid - 1
# 如果目标值大于中间元素的值,则将数组的下半部分划分为两半
else:
left = mid + 1
# 如果目标值不存在于数组中,则返回它将会被按顺序插入的位置
return left
复杂度分析:
- 时间复杂度:由于二分查找算法的时间复杂度为 O(log n),因此本题的时间复杂度也为 O(log n)。
- 空间复杂度:本题的空间复杂度为 O(1),因为我们只需要使用几个变量来存储中间元素的索引和数组的边界。
总结:
本题是 LeetCode 数组类型题目的经典题目之一,通过本题的学习,可以掌握二分查找算法的应用,以及数组操作的基本技巧。希望对大家有所帮助!