力扣(LeetCode) 35: 搜索插入位置 - 解法思路

问题概述

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

解法 1:线性搜索

工作原理

线性遍历数组,直到找到目标值或大于目标值的元素:

python 复制代码
class Solution:
    def searchInsert(self, nums, target):
        for i in range(len(nums)):
            if nums[i] >= target:
                return i
        
        return len(nums)

复杂度分析

  • 时间复杂度: O(n) - 最坏情况需要扫描整个数组
  • 空间复杂度: O(1) - 只使用常数额外空间

何时使用

  • 简单易懂
  • 适用于小数组
  • 对于大数组不是最优解,需要 O(log n) 复杂度

解法 2:二分搜索(最优)

工作原理

使用二分搜索查找目标值或确定插入位置。当循环退出时,left 指向插入位置:

python 复制代码
class Solution:
    def searchInsert(self, nums, target):
        left = 0
        right = len(nums) - 1
        
        while left <= right:
            mid = left + (right - left) // 2
            
            if nums[mid] == target:
                return mid
            elif nums[mid] < target:
                left = mid + 1
            else:
                right = mid - 1
        
        return left

复杂度分析

  • 时间复杂度: O(log n) - 每次迭代将搜索空间减半
  • 空间复杂度: O(1) - 只使用常数额外空间

何时使用

  • 推荐 - 排序数组的最优解
  • 满足 O(log n) 时间复杂度要求
  • 对于大数组显著更快

对比

方法 时间 空间 最佳适用
线性搜索 O(n) O(1) 小数组,简单实现
二分搜索 O(log n) O(1) 大数组,最优解

总结

二分搜索是此问题的最优解,因为数组已排序。它通过每次迭代将搜索空间减半来实现 O(log n) 时间复杂度。当二分搜索循环未找到目标值而退出时,left 自然指向正确的插入位置。

相关推荐
烬羽18 小时前
递归老写崩?一个"退回"公式,把回溯题变成填空题
javascript·深度学习·算法
闪电悠米18 小时前
力扣hot100-41.缺失的第一个正数-原地哈希详解
数据结构·算法·哈希算法
星空露珠19 小时前
28种颜色对应名称,
开发语言·数据库·算法·游戏·lua
QXWZ_IA21 小时前
桥梁数字孪生怎么落地?
人工智能·科技·算法·智能硬件·政务
Kel21 小时前
输出层与反分词(Output Layer & Detokenization)
人工智能·算法·架构
陕西企来客21 小时前
2026年7月技术好GEO优化方案:算法适配与内容策略
人工智能·算法·机器学习·技术好geo优化
Android研究员21 小时前
Android进阶之事件分发机制深度剖析
android·前端·面试
触底反弹21 小时前
🔥 AI 写代码总翻车?这套实战方法论救了我
人工智能·面试·程序员
风栖柳白杨21 小时前
【面试】AI算法工程师_空白自测版本
人工智能·算法·面试
imbackneverdie1 天前
知网官宣:禁止 AI 列为论文署名作者,标注 Gemini、DeepSeek 等 AI 为作者的稿件统一下架
大数据·人工智能·ai·职场和发展·aigc·科研·高校