LeetCode01 - 35.搜索插入位置

一、题目要求

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

请必须使用时间复杂度为 O(log n) 的算法

示例 1:

输入: nums = [1,3,5,6], target = 5
输出: 2

示例 2:

输入: nums = [1,3,5,6], target = 2
输出: 1

示例 3:

输入: nums = [1,3,5,6], target = 7
输出: 4

二、解决

因为题目要求时间复杂度为O(logn),因此这道题属于基础的利用二分查找的方法查找。

示例代码如下所示:

class Solution:def searchInsert(self, nums: List[int], target: int) -> int:left = 0right = len(nums) -1while left <= right:mid = (left+right) // 2if nums[mid] == target:return midelif nums[mid] > target:right = mid -1else:left = mid +1else:return right+1

注意点

需要满足如果找不到target,应当返回target在列表中的顺序此时应该满足left > right, 且left = right+1

因此若target不在列表中,target在列表中有三种情况:

1.当target比列表的最左边的值还小:

此时当left = right时,此时nums[mid]位于最左边第一个元素,还大于target,应该right = mid-1最标为-1,则此时target应该放到第一位,满足left。

2. 当target位于列表中间:

此时满足left = right ,若nums[mid] < target,即此时nums[mid]位于target相邻的左边!接下来需要进入if条件left = mid +1,则left此时即为target的位置;若nums[mid] < target,则此时nums[mid] > target,即此时nums[mid]位于target相邻的右边!此时mid的位置即为target的位置,index(target) = left

3. 当target比列表的最左边的值还大:

此时nums[mid]位于最右边的元素,即target比列表所有元素都大,index(target) = mid = left = len(nums)-1

为防止栈溢出,可以将mid = (left+ right) // 2 写成mid = left + (right - left) //2  更好。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/716625.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringMVC 学习(十一)之数据校验

目录 1 数据校验介绍 2 普通校验 3 分组校验 4 参考文档 1 数据校验介绍 在实际的项目中&#xff0c;一般会有两种校验数据的方式&#xff1a;客户端校验和服务端校验 客户端校验&#xff1a;这种校验一般是在前端页面使用 JS 代码进行校验&#xff0c;主要是验证输入数据…

文物预防性保护系统方案的需求分析

没有文物保存环境监测&#xff0c;就不能实施有效的文物预防性保护。因此要建立文物预防性保护体系&#xff0c;一定要先有良好的文物状态监测制度,进而进行科学有效的文物保护管理。所以,导入文物预防性保护监测与调控系统,首先就是要针对文物进行全年温度、湿度、光照等关键参…

使用Zint库生成一维码/条形码

下面代码是是使用 Zint 库生成 Code 128 类型的条形码&#xff0c;并将生成的条形码保存为 output.bmp 文件。下面是对代码的详细解释&#xff1a; #include 和 #include <zint.h>&#xff1a;这两行代码包含了所需的头文件&#xff0c;分别是标准输入输出流的头文件和 Z…

LeetCode---【链表的操作】

目录 206反转链表【链表结构基础】21合并两个有序链表【递归】我的答案【错误】自己修改【超出时间限制】在官方那里学到的【然后自己复写,错误】对照官方【自己修改】 160相交链表【未理解题目目的】在b站up那里学到的【然后自己复写,错误】【超出时间限制】对照官方【自己修改…

(C语言)qsort函数模拟实现

前言 我们需先了解qsort函数 qsort函数详解&#xff1a;http://t.csdnimg.cn/rTNv9 qsort函数可以排序多种数据类型&#xff0c;很是神奇&#xff0c;这是为什么&#xff0c;我们在里模拟实现这样的功能 目录 1. qsort函数模拟实现 2. 我们使用bubble_sort函数排序整形数…

探究前端的.less样式文件 css的增强版

前言 .less 文件是一种层叠样式表&#xff08;CSS&#xff09;预处理器语言的文件格式&#xff0c;简称 LESS&#xff08;Leaner Style Sheets&#xff09;。它扩展了 CSS 语言&#xff0c;增加了变量、混合、函数和许多其他技术&#xff0c;使得 CSS 更加易于维护和扩展。 与…

AntDesignVue之a-table中key不唯一问题处理的多种方式

AntDesignVue2之a-table中key不唯一问题处理的多种方式 文章目录 AntDesignVue2之a-table中key不唯一问题处理的多种方式1. key不唯一问题1. 问题描述2. 解决方法1. 带冒号的rowKey2 . 带冒号的rowKey绑定表达式3. 不带冒号的rowKey属性 1. key不唯一问题 1. 问题描述 antdv: …

Sunshine v0.21.0 安装卡住,闪退的问题解决

上期博客讲了如何利用 Sunshine 和 Moonlight 实现 iPad 当作 Windows 副屏&#xff0c;用官方 Windows installer 安装 Sunshine 过程中&#xff0c;遇到了安装卡住&#xff08;这个是因为需要国外网络环境&#xff09;&#xff0c;安装后运行闪退的问题。 Sunshine 下载地址…

OpenCV 4基础篇| OpenCV图像的裁切

目录 1. Numpy切片1.1 注意事项1.2 代码示例 2. cv2.selectROI()2.1 语法结构2.2 注意事项2.3 代码示例 3. Pillow.crop3.1 语法结构3.2 注意事项3.3 代码示例 4. 扩展示例&#xff1a;单张大图裁切成多张小图5. 总结 1. Numpy切片 语法结构&#xff1a; retval img[y:yh, x…

以目标检测和分类任务为例理解One-Hot Code

在目标检测和分类任务中&#xff0c;每一个类别都需要一个编码来表示&#xff0c;同时&#xff0c;这个编码会用来计算网络的loss。比如有猫&#xff0c;狗&#xff0c;猪三种动物&#xff0c;这三种动物相互独立&#xff0c;在分类中&#xff0c;将其中任意一种分类为其他都同…

YOLOv9独家原创改进|使用可改变核卷积AKConv改进RepNCSPELAN4

专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;主力高效涨点&#xff01;&#xff01;&#xff01; 一、改进点介绍 AKConv是一种具有任意数量的参数和任意采样形状的可变卷积核&#xff0c;对不规则特征有更好的提取效果。 RepNCSPELAN4是YOLOv9中的…

前端架构: 脚手架通用框架封装之启动检查功能开发(教程四)

脚手架启动前的检查功能开发 接上文&#xff0c;仍旧在 abc-cli 项目中参考&#xff1a;https://blog.csdn.net/Tyro_java/article/details/136431320现在要在脚手架启动前要做一些逻辑&#xff0c;可以在 hook 钩子函数中去书写比如&#xff0c;进行node版本的对比&#xff0…

2023年12月CCF-GESP编程能力等级认证Scratch图形化编程四级真题解析

一、单选题(共15题,共30分) 第1题 现代计算机是指电子计算机,它所基于的是( )体系结构。 A:艾伦图灵 B:冯诺依曼 C:阿塔纳索夫 D:埃克特-莫克利 答案:B 第2题 默认小猫角色,执行下列程序,以下说法正确的是? ( ) A:舞台上会出现无数个小猫 B:舞台只会出现…

java spring 02. AbstractApplicationContext

spring创建对象的顺序&#xff0c;先创建beanfactory&#xff0c;再会把xml文件读取到spring。 public ClassPathXmlApplicationContext(String[] configLocations, boolean refresh, Nullable ApplicationContext parent)throws BeansException {//调用父类的构造方法super(p…

Redis常用指令,jedis与持久化

1.redis常用指令 第一个是key的常用指令&#xff0c;第二个是数据库的常用指令 前面的那些指令都是针对某一个数据类型操作的&#xff0c;现在的都是对所有的操作的 1.key常用指令 key应该设计哪些操作 key是一个字符串&#xff0c;通过key获取redis中保存的数据 对于key…

flink重温笔记(九):Flink 高级 API 开发——flink 四大基石之WaterMark(Time为核心)

Flink学习笔记 前言&#xff1a;今天是学习 flink 的第 9 天啦&#xff01;学习了 flink 四大基石之 Time的应用—> Watermark&#xff08;水印&#xff0c;也称水位线&#xff09;&#xff0c;主要是解决数据由于网络延迟问题&#xff0c;出现数据乱序或者迟到数据现象&…

通过大语言模型理解运维故障:评估和总结

张圣林 南开大学软件学院副教授、博士生导师 第六届CCF国际AIOps挑战赛程序委员会主席 在ATC、WWW、VLDB、KDD、SIGMETRICS等国际会议和JSAC、TC、TSC等国际期刊发表高水平论文50余篇。主持国家自然科学基金项目2项&#xff0c;横向项目13项&#xff08;与华为、字节跳动、腾讯…

Sqli-labs靶场第20关详解[Sqli-labs-less-20]自动化注入-SQLmap工具注入

Sqli-labs-Less-20 通过测试发现&#xff0c;在登录界面没有注入点&#xff0c;通过已知账号密码admin&#xff0c;admin进行登录发现&#xff1a; 登录后会有记录 Cookie 值 设想如果在Cookie尝试加上注入语句&#xff08;报错注入&#xff09;&#xff0c;测试是否会执行…

C++STL之vector

vector 1. vector介绍 vector文档vector其实就是一个顺序表&#xff0c;它表示可变大小数组的序列容器。像数组一样&#xff0c;可以使用下标[] 来访问vector的元素&#xff0c;和数组一样高效&#xff1b;甚至&#xff0c;它的大小是可以动态改变的&#xff0c;其大小由容器自…

printf() 函数支持变长参数列表

printf() 函数也支持变长参数列表&#xff0c;可以使用省略号 … 来表示&#xff0c;用于指定要输出的多个值。在函数内部&#xff0c;可以使用 va_start() 和 va_end() 宏来访问变长参数列表中的值。例如&#xff1a; #include <stdio.h> #include <stdarg.h>voi…