返回
etCode从入门到精通:攻克35. 搜索插入位置
前端
2023-09-06 14:35:24
前言
欢迎来到 LeetCode 征程的第 35 关!今天,我们将深入探索一道经典题目:"搜索插入位置"。做好准备,磨刀霍霍向 LeetCode 进发吧!
题目概述
"搜索插入位置"题目要求我们在一个排序数组中找到一个目标值,如果目标值存在,就返回其索引。如果目标值不存在,则返回应该插入目标值的位置索引。
乍一看,这道题似乎很容易,但当你真正开始编写代码时,可能会发现一些隐藏的陷阱。别担心,我们一步一步来,稳扎稳打地解决它。
解题思路
解决这道题的常用方法有两种:顺序查找和二分查找。
顺序查找
顺序查找是最简单的方法,从数组头开始,一个一个元素地比较,直到找到目标值或到达数组尾。它的时间复杂度为 O(n),其中 n 是数组的长度。
二分查找
二分查找是一种更有效的算法,特别是当数组很大时。它通过将搜索范围缩小一半来工作,时间复杂度为 O(log n)。
代码实现
顺序查找
def search_insert(nums, target):
for i, num in enumerate(nums):
if num >= target:
return i
return len(nums)
二分查找
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(n)
- 二分查找:O(log n)
空间复杂度
两种方法的空间复杂度都是 O(1),因为它们不需要额外的空间。
总结
今天,我们一起攻克了 LeetCode 的第 35 关:"搜索插入位置"。通过顺序查找和二分查找两种方法,我们了解了如何在排序数组中高效地找到目标值或其插入位置。
记住,LeetCode 的征途是一场马拉松,而不是冲刺。坚持练习,不断总结,终有一天,你会成为一名 LeetCode 大神!