力扣:35. 搜索插入位置

力扣: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

提示:

1 <= nums.length <= 104
-104 <= nums[i] <= 104
nums 为 无重复元素 的 升序 排列数组
-104 <= target <= 104

1.暴力解法

从数组的左边遍历到右边,如果遇到相等的元素,直接返回下标;如果遇到第 1 个严格大于 target 的元素,返回这个元素的下标;如果数组里所有的元素都严格小于 target,返回数组的长度 len。
代码如下:

#include<iostream>
#include<vector>
using namespace std;
class Solution{
public:int searchInsert(vector<int>& nums, int target){int num = 0;int tmp = 0;for(int i = 0; i < nums.size(); i++){if(nums[i] == target){return i;}if(nums[i] > target && num == 0){tmp = i;num = 1;}}if(num == 0){return nums.size();}else {return tmp;}}
};int main(){Solution solution;vector<int> nums = {1,3,5,6,9,13,27,34,49,58,60};int target = 44;int insertPostion = solution.searchInsert(nums,target);cout << "The inset postion for target " << target << " is " << insertPostion << endl;return 0;
}

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/a2d9f9092b774b24b3842c2484f87f19.png

2.二分查找

在有序数组中查找插入元素的位置,显然可以使用二分查找。提供的思路是「排除法」,思路是:在循环的过程中,不断排除不需要的解,最后剩下的那个元素的位置就一定是插入元素的位置。

具体来说:

首先,插入位置有可能在数组的末尾,需要单独判断,此时返回数组的长度;
否则,根据示例和暴力解法的分析,插入的位置是大于等于 target 的第 1 个元素的位置。
因此,严格小于 target 的元素一定不是解,在循环体中将左右边界 left 和 right 逐渐向中间靠拢,最后 left 和 right 相遇,则找到了插入元素的位置。根据这个思路,可以写出如下代码。

#include<iostream>
#include<vector>
using namespace std;
class Solution{
public:int insearchInsert(vector<int> & nums, int target){int len = nums.size();if(len == 0){return 0;}if(nums[len - 1] < target){return len;}int left = 0;int right = len - 1;while(left < right){int mid = left + ((right - left) / 2);if(nums[mid] < target){left = mid + 1;}else {right = mid;}}return left;}
};
int main()
{Solution solution;vector<int> nums = {1,3,5,6,9,13,27,34,49,58,60};int target = 44;int insertPostion = solution.insearchInsert(nums,target);cout << " The target " << target << " is " << insertPostion << endl;return 0;
}

在这里插入图片描述
时间复杂度:O(log⁡n)O(\log n)O(logn),其中 nnn 为数组的长度。二分查找所需的时间复杂度为 O(log⁡n)O(\log n)O(logn)。

空间复杂度:O(1)O(1)O(1)。我们只需要常数空间存放若干变量。

力扣:35. 搜索插入位置

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

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

相关文章

Mybatis | Mybatis的核心配置

目录: Mybatis的核心配置 :一、MyBatis的 “核心对象”1.1 SqlSessionFactory1.2 SqlSession :SqlSession对象中的操作数据库的方法 :\<T> T selectOne ( String statement )\<T> T selectOne( String statement , Object parameter )\<E> List\<E> se…

SpringBoot基于注解实现全局日期格式化

首先根据项目要求提供自定义的日期序列化器和反序列化器&#xff0c;其中包括&#xff1a; DateJsonSerializerextendsJsonSerializer 表示将Date格式化为日期字符串。DateJsonDeserializerextendsJsonDeserializer 表示将日期字符串解析为Date日期。 使用注解 JsonComponent…

openGauss学习笔记-232 openGauss性能调优-系统调优-资源负载管理-资源管理准备-资源规划

文章目录 openGauss学习笔记-232 openGauss性能调优-系统调优-资源负载管理-资源管理准备-资源规划 openGauss学习笔记-232 openGauss性能调优-系统调优-资源负载管理-资源管理准备-资源规划 完成资源负载管理功能配置前&#xff0c;需要先根据业务模型完成租户资源的规划。业…

绍兴市新昌县人大一行莅临迪捷软件走访考察

2024年2月29日下午&#xff0c;绍兴市新昌县人大常委会副主任王敏慧一行莅临迪捷软件走访考察&#xff0c;绍兴市委科创委副主任、科创走廊建设领导小组副组长、市人大一级巡视员王继岗&#xff0c;绍兴市科技局副局长、科创走廊建设办公室常务副主任梁枫陪同。 王主任一行听取…

九州金榜|导致孩子厌学因素有哪些?家庭教育中要怎样解决?

现在如今孩子出现厌学的情况越来越严重&#xff0c;这也难坏了很多家长&#xff0c;众所周知&#xff0c;当下社会竞争越来越激烈&#xff0c;孩子的压力也越来越大&#xff0c;这也是导致孩子厌学的主要因素。其实家庭因素也是引起孩子厌学情绪产生的重要原因&#xff0c;在家…

数据结构——二叉树的基本概念及顺序存储(堆)

目录 一.前言 二.树概念及结构 2.1 树的概念 2.2 树的相关概念 2.3 树的表现 2.4 树在实际中的应用&#xff08;表示文件系统的目录树结构&#xff09; 三.二叉树的概念及结构 3.1 概念 3.2 特殊的二叉树 3.3 二叉树的性质 3.4 二叉树的存储结构 3.4.1 顺序存储 3…

YOLOv9有效提点|加入SE、CBAM、ECA、SimAM等几十种注意力机制(一)

专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;主力高效涨点&#xff01;&#xff01;&#xff01; 一、本文介绍 本文将以SE注意力机制为例&#xff0c;演示如何在YOLOv9种添加注意力机制&#xff01; 《Squeeze-and-Excitation Networks》 SENet提出…

向上生长笔记

第一章 成为一个很厉害的人(持续输入&#xff0c;反复练习) 为什么要学习及如何学习 1、自毁趋势(熵增)&#xff0c;故需要能量输入(负熵流) //引申&#xff1a;水往低处流是趋势&#xff0c;学习是逆趋势。 2、持续输入能量&#xff08;物质和信息&#xff09;&#xff0c;…

linux本地安装nginx教程

1.安装编译工具及库文件 yum -y install make zlib zlib-devel gcc-c libtool openssl openssl-devel pcre-devel 2.下载 nginx包到指定位置 wget https://nginx.org/download/nginx-1.18.0.tar.gz 3.解压包 tar -zxvf nginx-1.18.0.tar.gz #解压 4.在你想安装nginx的…

力扣2月最后三天的每日一题

力扣2月最后三天的每日一题 前言2867.统计树中的合法路径数目思路确定1e5中的质数统计每个点的连接情况开始对质数点进行处理完整代码 2673.使二叉树所有路径值相等的最小代价思路完整代码 2581.统计可能的树根数目思路建立连通关系将猜测数组变为哈希表&#xff0c;方便查询利…

2280. 最优标号(最小割,位运算)#困难,想不到

活动 - AcWing 给定一个无向图 G(V,E)&#xff0c;每个顶点都有一个标号&#xff0c;它是一个 [0,2^31−1] 内的整数。 不同的顶点可能会有相同的标号。 对每条边 (u,v)&#xff0c;我们定义其费用 cost(u,v) 为 u 的标号与 v 的标号的异或值。 现在我们知道一些顶点的标号…

七通道NPN 达林顿管GC2003,专为符合标准 TTL 而制造,最高工作电压 50V,耐压 80V

GC2003 内部集成了 7 个 NPN 达林顿晶体管&#xff0c;连接的阵列&#xff0c;非常适合逻辑接口电平数字电路&#xff08;例 如 TTL&#xff0c;CMOS 或PMOS 上/NMOS&#xff09;和较高的电流/电压&#xff0c;如电灯电磁阀&#xff0c;继电器&#xff0c;打印机或其他类似的负…

读《代码整洁之道》有感

最近读了一本书&#xff0c;名字大家都看到了&#xff1a;《代码整洁之道》&#xff0c;之前一直只是听说过这本书的大名&#xff0c;却一直没有进行拜读&#xff0c;最近想起来了就想着看一看&#xff0c;不看不要紧&#xff0c;看了之后就像吃了炫迈&#xff0c;根本停不下来…

MATLAB环境下脑电信号EEG的谱分析

脑电信号一直伴随着人类的生命&#xff0c;脑电波是脑神经细胞发生新陈代谢、离子交换时细胞群兴奋突触电位总和&#xff0c;脑电信号的节律性则和丘脑相关&#xff0c;含有丰富的大脑活动信息。通常我们所接触的脑电图都是头皮脑电图&#xff0c;在有些特殊场合还需要皮下部位…

10.广域网技术

1. PPP实验点这里&#xff08;拓扑代码&#xff09; 2. PPPoE配置实验点这里&#xff08;拓扑代码&#xff09; 目录 一、广域网二、PPP协议三、PPP链路建立过程1-LCP&#xff08;链路协商&#xff09;四、PPP链路建立过程2-PAP/CHAP&#xff08;认证协商&#xff0c;可选&…

linux系统多个mysql时的部署和服务注册

在一次实际部署过程中,碰到了服务器已经部署了一个mysql服务. 再部署新的mysql时,特别注意不能与另一个mysql互相影响.记录一次部署中存在的问题和解决方法. 因为已存在mysql,新的mysql部署采用的是mysql.tar.gz解压手动安装,避免.rpm或者.deb等自动安装方式覆盖了已有mysql的配…

python语言1

一、pytho中的注释 1.1注释的理解 程序员在代码中对代码功能解释说明的标注性文字可以提高代码的可读性注释的内容将被python解释器忽略&#xff0c;不被计算机执行 1.2注释的分类 注释分为&#xff1a;单行注释、多行注释、中文声明注释 &#xff08;1&#xff09;单行注…

LeetCode240题:搜索二维矩阵II(python3)

代码思路&#xff1a; “根节点” 对应的是矩阵的 “左下角” 和 “右上角” 元素&#xff0c;以 matrix 中的左下角元素为标志数 flag &#xff0c;则有: 若 flag > target &#xff0c;则 target 一定在 flag 所在行的上方 &#xff0c;即 flag 所在行可被消去&#xff0c…

kotlin安卓开发教程视频,2024年Android开发陷入饱和

Android基础 1、什么是ANR 如何避免它&#xff1f; 如果耗时操作需要让用户等待&#xff0c;那么可以在界面上显示进度条。 2、View的绘制流程&#xff1b;自定义View如何考虑机型适配&#xff1b;自定义View的事件 3、分发机制&#xff1b;View和ViewGroup分别有哪些事件分…

Java协议解析:探索网络编程的核心

引言 在当今数字化时代&#xff0c;网络编程扮演着日益重要的角色&#xff0c;而Java协议则成为这个领域中不可或缺的一部分。随着互联网的普及和各种网络应用的不断涌现&#xff0c;对网络通信的要求也变得越来越严格&#xff0c;这就需要对Java协议进行深入的理解和探索。本…