当前位置: 首页 > news >正文

LeetCode 35 搜索插入位置题解

LeetCode 35 搜索插入位置题解

题目描述

题目链接
给定一个排序数组和一个目标值,在数组中找到目标值并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置(需保证数组仍然有序)。要求时间复杂度为 O(log n)。

解题思路

二分查找法

  1. 区间定义:采用左闭右闭区间 [left, right]
  2. 循环条件:left <= right 保证区间有效性
  3. 指针移动
    • 中间值 < 目标值 → 搜索右半区(left = mid + 1)
    • 中间值 > 目标值 → 搜索左半区(right = mid - 1)
  4. 终止条件:当 left > right 时,left 即为插入位置
    循环终止条件 当 left > right 时循环终止,此时:
  • left 指向第一个 大于 目标值的元素位置
  • right 指向最后一个 小于 目标值的元素位置

初始区间 [0,3] → mid=1(值为3)
3 > 2 → 右指针移动:right=0
新区间 [0,0] → mid=0(值为1)
1 < 2 → 左指针移动:left=1
循环终止,left=1 → 正确插入位置

关键点解析

# 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
# 请必须使用时间复杂度为 O(log n) 的算法。
# 示例 1:
# 输入: nums = [1,3,5,6], target = 5
# 输出: 2
# 示例 2:
# 输入: nums = [1,3,5,6], target = 2
# 输出: 1
from typing import Listclass Solution:def searchInsert(self, nums: List[int], target: int) -> int:left, right = 0, len(nums) - 1while left <= right:mid = (left + right) // 2  # 中间索引计算if nums[mid] == target:return midelif nums[mid] < target:   # 目标在右侧left = mid + 1         # 收缩左边界else:                       # 目标在左侧right = mid - 1        # 收缩右边界return left  # 插入位置为最终left值if __name__ == "__main__":test1 = Solution().searchInsert([1,3,5,6], 5)  # 2test2 = Solution().searchInsert([1,3,5,6], 2)   # 1print(test1, test2)

3 # 插入到数组最后面

复杂度分析

操作时间复杂度空间复杂度
二分查找O(log n)O(1)
总复杂度O(log n)O(1)

算法优势

  1. 严格对数复杂度:每次循环排除一半元素
  2. 内存效率高:仅使用常数额外空间
  3. 代码简洁:无需处理复杂边界条件
http://www.xdnf.cn/news/522415.html

相关文章:

  • Axure设计数字乡村可视化大屏:构建乡村数据全景图
  • 【滑动窗口】LeetCode 1004题解 | 最大连续1的个数 Ⅲ
  • 小程序弹出层/抽屉封装 (抖音小程序)
  • CSS- 4.6 radiu、shadow、animation动画
  • CVE-2015-4553 Dedecms远程写文件
  • prisma连接非关系型数据库mongodb并简单使用
  • 【QT】类A和类B共用类C
  • 分布式数据库TiDB:深度解析原理、优化与架构设计
  • 永磁同步电机高性能控制算法(22)——基于神经网络的转矩脉动抑制算法为什么低速时的转速波动大?
  • 批量剪辑 + 矩阵分发 + 数字人分身源码搭建全技术解析,支持OEM
  • 【NLP】37. NLP中的众包
  • VR 互动实训与展示,借科技开启沉浸式体验新篇​
  • 【内测征集】LarkVR 播控系统上新:VR 应用一站式专业播控与管理工具
  • 基于CATIA参数化圆锥建模的自动化插件开发实践——NX建模之圆锥体命令的参考与移植(一)
  • Python函数——万字详解
  • Windows 安装显卡驱动
  • Linux云计算训练营笔记day11(Linux CentOS7)
  • esp32课设记录(五)整个项目开源github
  • 用Python将 PDF 中的表格提取为 Excel/CSV
  • 腾讯云安装halo博客
  • 游戏引擎学习第294天:增加手套
  • LeetCode 217.存在重复元素
  • 大语言模型训练数据格式:Alpaca 和 ShareGPT
  • 将视频中的音乐传到qq音乐上听
  • DS新论文解读(2)
  • HashMap的扩容机制
  • Vue环境下数据导出Excel的全面指南
  • 一:操作系统之系统调用
  • 【应用开发十】pwm
  • numpy数组的拆分和组合