当前位置: 首页 > 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. 代码简洁:无需处理复杂边界条件

相关文章:

  • 力扣HOT100之二叉树:230. 二叉搜索树中第 K 小的元素
  • python-leetcode 67.寻找两个正序数组中的中位数
  • MySQL数据库基础 -- SQL 语句的分类,存储引擎
  • Django框架的前端部分使用Ajax请求一
  • 【数根】2022-1-24
  • Vue 中 v-model 的三种使用方式对比与实践
  • C++23 std::mdspan:多维数组处理新利器
  • 【第二届帕鲁杯】第二届帕鲁杯 主环境 基本完整wp
  • linux安装conda环境-ubuntu
  • ECharts-饼图
  • 深入理解 ZAB:ZooKeeper 原子广播协议的工作原理
  • 游戏开发实战(一):Python复刻「崩坏星穹铁道」嗷呜嗷呜事务所---源码级解析该小游戏背后的算法与设计模式【纯原创】
  • 云计算简介:从“水电”到“数字引擎”的技术革命
  • 使用docker——10分钟内 完成一个高可用的 MongoDB 副本集部署
  • 【HTML】【面试提问】HTML面试提问总结
  • UE5在C++项目中判断不同平台
  • Docker项目部署深度解析:从基础命令到复杂项目部署
  • HarmonyOS实战:自定义时间选择器
  • 基于正点原子阿波罗F429开发板的LWIP应用(1)——网络ping通
  • YOLOv8 在单片机上的几种部署方案
  • 特写|银耳种植“北移”到沧州盐山,村民入伙可年增收4万元
  • 俄外长与美国务卿通电话,讨论俄美接触等问题
  • 泽连斯基:俄代表团级别低,没人能做决定
  • 马上评|中学生被操场地面烫伤,谁的“大课间”?
  • KPL“王朝”诞生背后:AG和联赛一起迈向成熟
  • 京东一季度净利增长五成,营收增速创近三年新高,称外卖业务取得显著进展