返回

etCode从入门到精通:攻克35. 搜索插入位置

前端

前言

欢迎来到 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 大神!

拓展阅读