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

leetcode hot100刷题日记——17.搜索插入位置

哈喽~第二周刷题开始了,今天这道题虽然属于简单,而且是二分查找模板题,但是我太菜了我感觉有好多可以让我思考的地方。
就一起看看这道题目吧~
在这里插入图片描述
解答:

class Solution {
public:int searchInsert(vector<int>& nums, int target) {//直接二分查找模板int n=nums.size();int left=0,right=n-1;int mid=0;while(left<=right){mid=left+(right-left)/2;if(target>nums[mid]){left=mid+1;}else{right=mid-1;}}return left;}
};

时间复杂度:O(logn)
空间复杂度:O(1)

思考:
为什么返回left就可以得到target要插入的位置呢?
left 指向的是 第一个大于或等于 target 的位置。
right 指向的是 最后一个小于 target 的位置。

我们都知道二分查找原来是返回mid,即nums[mid]=target.
在我们的代码中,这时right会赋值为mid-1。之后如果left<=right,会继续循环,但此时只有left会增加而right不变,直到while判定条件为否。

理解:right已经到头了,right不会再变了。left要逐渐逼近right

而退出while的时候,left一定为right+1,即left=mid-1+1=mid
注意这里mid我加粗了,这里mid不是每次循环在变的mid,而是之前的right的值的那个mid

也就是说,nums[left]=nums[mid]=target
和二分查找又一样了对不对??

http://www.xdnf.cn/news/9086.html

相关文章:

  • Linux中logger命令的使用方法详解
  • 嵌入式开发STM32 -- 江协科技笔记
  • window 显示驱动开发-呈现开销改进(二)
  • c++进阶——智能指针
  • maven中的grpc编译插件protobuf-maven-plugin详解
  • SQL进阶之旅 Day 4:子查询与临时表优化
  • C/C++语言中成双成对出现的都有哪些?
  • STM32程序运行不了,仿真功能也异常,连断点和复位都异常了
  • 网络流学习笔记(基础)
  • Beckhoff PLC 功能块 FB_CTRL_ACTUAL_VALUE_FILTER (模拟量滤波)
  • vSphere 7.0 client 提示HTTP状态 500- 内部服务器错误
  • GROUP BY SQL
  • 【动态规划】子数组系列(一)
  • 【备战秋招】C++音视频开发经典面试题整理
  • 学校住宿管理系统——仙盟创梦IDE
  • OpenGL Chan视频学习-7 How I Deal with Shaders in OpenGL
  • 0基础学习Linux之揭开朦胧一面:环境基础开发工具
  • java8函数式接口(函数式接口的匿名实现类作为某些方法的入参)
  • 2025年5月系统架构设计师考试真题回忆版
  • 7.安卓逆向2-frida hook技术-介绍
  • 重学计算机网络之命令整理
  • 数据加密技术:守护网络通信安全的基石
  • ceph 报错 full ratio(s) out of order
  • Elasticsearch数据同步方案
  • VS Code设置Dev Containers: Reopen in Container
  • MongoDB基础知识(浅显)
  • docker compose yml 启动的容器中,如何使用linux环境变量赋值
  • Python 进阶学习
  • [CSS3]rem移动适配
  • *HTML `<script>` 标签中的核心属性解析:掌控脚本加载与执行的艺术