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

LeetCode刷题记录----35.搜索插入位置(Easy)

2025/8/28

题目(Easy):


我的思路:

因为要求时间复杂度为O(log n),因此自然联想到折半查找。即定义左右边界 left,right,根据它们中间的mid = (left+right)/2(向下取整)索引位置和target值的大小,来逐步缩小搜索的区间。

最后如果没有检索到目标值的话,插入的位置就是left指针当前指向的位置。因为如果最后mid处的值大于target的话,那应该插入位置为mid;如果mid处的值小于target的话,那应该插入位置为mid+1的位置。而这两个位置正好也都对应两种情况下left指针的位置,因此正好返回left;

具体代码如下:

class Solution {
public:int searchInsert(vector<int>& nums, int target) {//二分查找了int left  = 0;int right = nums.size()-1;  //确定好左右边界int mid = 0;while(left <= right){mid = left + (right - left) / 2;if(nums[mid] == target){return mid;}else if(nums[mid] > target){right = mid - 1;}else if(nums[mid] < target){left = mid + 1;}}//return nums[mid] > target ? mid : mid+1;return left;    //如果target 比 mid 位置小,那么mid和left会在同一位置;如果Target比mid大,那么最后left 还会 = mid + 1;和上面的表达式结果一致}
};

时间复杂度:O(log n)

空间复杂度:O(1)


总结:

①对于要求时间复杂度简化到O(logN)的有序数组中的检索,可以想到用折半查找

②对于最后没有找到需要插入的位置,正好插入 left指针指向的位置

http://www.dtcms.com/a/356113.html

相关文章:

  • 117、【OS】【Nuttx】【周边】效果呈现方案解析:while 循环处理(下)
  • 虚拟机逃逸攻防演练技术文章大纲
  • 八个按键一一对应八个输出
  • C语言————斐波那契数列(例题1)
  • BoardSim仿真
  • DoIP路由激活报文
  • Shell脚本(2)
  • 洛谷p1028数的计算 详解
  • 【智能体】零代码学习 Coze 智能体(1)
  • 人工智能基础概念
  • java通过redis简单实现分布式锁
  • 【MySQL数据库】存储引擎 学习记录
  • 深度学习进阶
  • B站 XMCVE Pwn入门课程学习笔记(8)
  • Mybatis中缓存机制的理解以及优缺点
  • 详解 外部负载均衡器 → Ingress Controller Pod 这个过程
  • LCEDA电气规则
  • HTTPS的底层是怎么做的,使得数据更安全
  • 【python】python进阶——with关键字
  • 一个格式化方法一个打印语句完成一个基本日历展示,完成完美『终端呈现』(迭代升级)(彩色·Python)
  • 刀客doc:Instagram会成为Meta广告业务的第二曲线吗?
  • 机器视觉学习-day05-ROI切割
  • 博创软件慧云台庙务管理系统产品优势分析
  • Java -- 文件基础知识--Java IO流原理--FileReader
  • Makefile的使用
  • 进程组 会话 作业控制 守护进程
  • LeetCode 100 -- Day7
  • JDK8升级到JDK17的注意事项
  • @RequiredArgsConstructor 和构造同时使用,注入会不会导致空指针
  • Dify 中的 Signal Killed 问题排查指南