力扣: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. 搜索插入位置

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

windows系统玩《模拟人生 4》 免安装版本

本文介绍如何在windows系统上玩《模拟人生 4》这个游戏&#xff0c;无需安装&#xff0c;直接玩&#xff01; 首先下载百度网盘分享的文件&#xff0c;这里下载文章末尾。 下载完成后先点击 language-change.exe 将游戏语言更改为英文&#xff0c;默认是俄语&#xff0c;根本…

sqllabs的order by注入

当我们在打开sqli-labs的46关发现其实是个表格&#xff0c;当测试sort等于123时&#xff0c;会根据列数的不同来进行排序 我们需要利用这个点来判断是否存在注入漏洞&#xff0c;通过加入asc 和desc判断页面有注入点 1、基于使用if语句盲注 如果我们配合if函数&#xff0c;表达…

B端系统:导航机制设计,用户体验提升的法宝

Hi&#xff0c;大家好&#xff0c;我是贝格前端工场&#xff0c;从事8年前端开发的老司机。很多B端系统体验不好很大一部分原因在于导航设计的不合理&#xff0c;让用户无所适从&#xff0c;大大降低了操作体验&#xff0c;本文着重分析B端系统的导航体系改如何设计&#xff0c…

[CISCN2019 华北赛区 Day2 Web1]Hack World 1 题目分析与详解

一、分析判断 进入靶机&#xff0c;主页面如图&#xff1a; 主页面提供给我们一条关键信息&#xff1a; flag值在 表flag 中的 flag列 中。 接着我们尝试输入不同的id&#xff0c;情况分别如图&#xff1a; 当id1时&#xff1a; 当id2时&#xff1a; 当id3时&#xff1a; 我…

【IO流系列】ConvertStream 转换流

转换流 1. 概述2. 作用3. 字符编码和字符集3.1 字符编码3.2 字符集 4. InputStreamReader字符转换输入流4.1 构造方法4.2 代码示例 5. OutputStreamWriter字符转换输出流5.1 构造方法5.2 代码示例 6. 练习6.1 练习1&#xff1a;转换文件编码6.2 练习2&#xff1a;读取文件数据 …

Spring 源码解析

文章目录 前言相关Spring的定义接口整体代码StartupStep contextRefresh this.applicationStartup.start("spring.context.refresh")prepareRefresh()obtainFreshBeanFactory()registerBeanPostProcessors(beanFactory)SpringAOP原码流程EnableAspectJAutoProxyAnno…

基于java+springboot女士电商平台系统源码+文档设计

基于javaspringboot女士电商平台系统源码文档设计 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获取源…

GaussDB跨云容灾:实现跨地域的数据库高可用能力

背景 金融、银行业等对数据的安全有着较高的要求&#xff0c;同城容灾建设方案&#xff0c;在绝大多数场景下可以保证业务数据的安全性&#xff0c;但是在极端情况下&#xff0c;如遇不可抗力因素等&#xff0c;要保证数据的安全性&#xff0c;就需要采取跨地域的容灾方案。 …

【大咖分享】:千帆AppBuilder:我的AI大模型科研搭子

同济子豪兄介绍 不知不觉&#xff0c;我做人工智能科技区博主已经七年了。从斯坦福公开课系列&#xff0c;到精读AI经典论文系列&#xff0c;从编程奇妙夜&#xff0c;到两天搞定AI毕业设计系列。我们为十几万学员&#xff0c;提供人工智能各方向的论文课程、生涯规划、课题辅…

ROS2体系框架

文章目录 1.ROS2的系统架构2.ROS2的编码风格3.细谈初始化和资源释放4.细谈配置文件5.ROS2的一些命令6.ROS2的核心模块6.1 通信模块6.2 功能包6.3 分布式6.4 终端命令和rqt6.5 launch6.6 TF坐标变换6.7 可视化RVIZ 1.ROS2的系统架构 开发者的工作内容一般都在应用层&#xff0c;…

【计算机网络】五种IO模型与IO多路转接之select

文章目录 一、五种IO模型二、非阻塞IO1.fcntl2.实现函数SetNoBlock3.轮询方式读取标准输入 三、I/O多路转接之select1.初识select2.select函数原型3.socket就绪条件4.select的特点5.select缺点6.select使用案例--只读取数据的server服务器1.err.hpp2.log.hpp3.sock.hpp4.select…

游泳耳机哪种款式好?简单6招教你选到高品质机型!

游泳是一项全身性的运动&#xff0c;不仅能帮助我们保持身体健康&#xff0c;还能让我们在水中放松心情&#xff0c;享受水中的乐趣。而音乐则是人们生活中不可或缺的一部分&#xff0c;它能带给我们快乐和力量。当游泳与音乐相结合&#xff0c;游泳耳机应运而生&#xff0c;为…

MySQL-MHA搭建、故障测试

一、架构说明 MHA&#xff08;Master High Availability&#xff09;是一个用于 MySQL 主从复制管理和自动故障转移的开源工具集。MHA 的主要目的是提供 MySQL 环境的高可用性和自动故障转移功能&#xff0c;确保在主库发生故障时能够快速切换到备库&#xff0c;降低业务中断时…

机器人组装、充电桩组装行业生产管理MES系统免费用

​随着工业4.0和智能制造的兴起&#xff0c;企业对于生产过程的数字化、智能化需求日益迫切。传统的MES系统实施周期长、成本高&#xff0c;成为许多企业数字化转型的瓶颈。而低代码开发平台的出现为这一问题提供了新的解决思路。 ​一、万界星空科技低代码平台的优势&#xff…

【市工信】2024年青岛市绿色工厂、绿色工业园区等绿色制造示范申报

科大睿智小编从青岛市工信局了解到&#xff0c;为深入贯彻绿色发展理念&#xff0c;牢固树立绿色低碳发展导向&#xff0c;进一步完善绿色制造体系&#xff0c;培育绿色制造先进典型&#xff0c;根据《工业和信息化部关于印发<绿色工厂梯度培育及管理暂行办法>的通知》&a…

nginx出现 “414 request-uri too large”

nginx出现 “414 request-uri too large” 1.修改传参方式 POST 2.字段能变成后端获取就自己获取&#xff0c;不用前端传 3.修改nginx配置&#xff0c;添加client_header_buffer_size 512k;large_client_header_buffers 4 512k;配置

zephyr学习

zephyr内核对象学习 定时器 类似linux的定时器&#xff0c; 可以分别设置第一次到期时间和后续的周期触发时间&#xff0c; 可以注册到期回调和停止回调 还有一个计数状态&#xff0c;用于标记timer到期了多少次 duration&#xff1a;设定timer第一次到期的时间。 period: …

【电机仿真】空间矢量脉宽调制(SVPWM)算法与实现

前言 文章【电机仿真】永磁同步电机模型中所提及了PMSM数学模型&#xff0c;模型算法是电机控制的理论基础&#xff0c;但在实际控制中&#xff0c;需要将这两部分具象化。实际电机所需要的总是三相电流或者电压&#xff0c;控制对象为逆变器中的开关器件&#xff0c;我们需要将…

C/C++ Zlib库调用Minzip来封装MyZip压缩类

文章目录 1、C/C Zlib库调用Minzip来封装MyZip压缩类1.1、类的功能实现1.1.1、ZIP压缩函数 Compress1.1.2、ZIP解压函数 UnCompress1.1.3、代码如下1.1.4、如何使用类 1、C/C Zlib库调用Minzip来封装MyZip压缩类 Zlib是一个开源的数据压缩库&#xff0c;提供了一种通用的数据压…

金仕达与 DolphinDB 建立深度合作,共筑 FICC 科技创新新篇章

从“关起门做交易”到“打开门做服务”&#xff0c;国内 FICC 业务正经历从自营到市场化服务的转变&#xff0c;借助数据分析、算法交易等技术的快速发展&#xff0c;交易团队能够更加主动地发现市场需求&#xff0c;为不同客群提供更好的做市业务&#xff0c;FICC 交易电子化已…