LeetCode 面试经典 150_二分查找_搜索插入位置(111_35_C++_简单)

LeetCode 面试经典 150_二分查找_搜索插入位置(111_35_C++_简单)

    • 题目描述:
    • 输入输出样例:
    • 题解:
      • 解题思路:
        • 思路一(二分查找):
      • 代码实现
        • 代码实现(思路一(二分查找)):
        • 以思路一为例进行调试
        • 部分代码解读

题目描述:

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

请必须使用时间复杂度为 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、搜索插入位置,如果数组中之前存在与插入元素相同大小的元素,则之前元素的位置便是插入位置。如果之前不存在相同大小的元素,则插入到对应大小的位置。
2、具体思路如下:
我们每次查找取中间的元素与插入元素进行比对:
① 若中间元素等于插入元素则返回中间元素的下标。
② 若中间元素小于插入元素则插入元素的位置肯定在中间元素的右侧。
③ 若中间元素大于插入元素则插入元素的位置肯定在中间元素的左侧。
④ 依次进行查找,直到查找到对应位置。(二分查找结束没找到元素时,**左下标(left)**正好是插入的位置)

3、复杂度分析:
① 时间复杂度:O(logn),其中n为数组的长度。(每次将搜索范围缩小一半)
② 空间复杂度:O(1)。使用常数空间存放若干变量。

代码实现

代码实现(思路一(二分查找)):
classSolution{public:intsearchInsert(vector<int>&nums,inttarget){// 初始化左右指针:left指向数组的开始,right指向数组的末尾intleft=0,right=nums.size()-1,mid;// 使用二分查找算法,当 left <= right 时继续查找while(left<=right){// 计算中间元素的索引,避免整数溢出mid=((right-left)>>1)+left;// 如果中间元素大于目标值,说明目标值在左半部分if(nums[mid]>target){right=mid-1;// 调整右指针,缩小搜索范围到左半部分}// 如果中间元素小于目标值,说明目标值在右半部分elseif(nums[mid]<target){left=mid+1;// 调整左指针,缩小搜索范围到右半部分}// 如果中间元素等于目标值,直接返回中间元素的索引else{returnmid;}}// 如果没有找到目标值,返回应该插入的位置,也就是 left 指针的位置returnleft;}};
以思路一为例进行调试
#include<iostream>#include<vector>usingnamespacestd;classSolution{public:intsearchInsert(vector<int>&nums,inttarget){// 初始化左右指针:left指向数组的开始,right指向数组的末尾intleft=0,right=nums.size()-1,mid;// 使用二分查找算法,当 left <= right 时继续查找while(left<=right){// 计算中间元素的索引,避免整数溢出mid=((right-left)>>1)+left;// 如果中间元素大于目标值,说明目标值在左半部分if(nums[mid]>target){right=mid-1;// 调整右指针,缩小搜索范围到左半部分}// 如果中间元素小于目标值,说明目标值在右半部分elseif(nums[mid]<target){left=mid+1;// 调整左指针,缩小搜索范围到右半部分}// 如果中间元素等于目标值,直接返回中间元素的索引else{returnmid;}}// 如果没有找到目标值,返回应该插入的位置,也就是 left 指针的位置returnleft;}};intmain(){// 定义一个整数向量 nums,初始化为 {1, 3, 5, 6}vector<int>nums={1,3,5,6};// 定义目标值 target,设定为 5inttarget=5;// 创建一个 Solution 类的对象 sSolution s;// 调用 searchInsert 方法,传入 nums 和 target,返回插入位置并输出// 该函数返回 target 的插入位置,如果已存在则返回目标值的索引cout<<s.searchInsert(nums,target);return0;}
部分代码解读

”>>“ 与 “/” 对比

(right-left)>>1(right-left)/2

效率上,(right - left) >> 1 比 (right - left) / 2更高效,尤其在低级语言或不进行优化的情况下。
在现代编译器和硬件上,差异可能非常小,因为编译器可能会将除法优化为类似位移的操作,特别是对整数类型。

LeetCode 面试经典 150_二分查找_搜索插入位置(111_35)原题链接
欢迎大家和我沟通交流(✿◠‿◠)

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

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

相关文章

2026年政务大厅智能化建设必备设备与硬件清单解析 - 智造出海

随着政务服务智能化渗透率要求的不断提升,传统政务大厅在高峰期分流、跨部门业务协同及适老化服务方面仍面临显著挑战。硬件设施的数字化升级是突破服务效率瓶颈、实现“一网通办”线下落地的基础保障,以下是对政务场…

2026年汽车4S店数字化转型必备智能设备全解析 - 智造出海

当前汽车零售行业面临人力成本攀升与服务体验同质化的双重挑战,传统的人海战术已难以适应精细化运营需求。通过引入智能化硬件设备重构“接待-销售-售后”全链路,成为提升门店运营效率与客户转化率的关键路径。以下是…

Zookeeper分布式锁实现原理讲解:配合代码片段逐步演示

Zookeeper分布式锁实现原理讲解&#xff1a;配合代码片段逐步演示 在构建高可用的分布式系统时&#xff0c;一个常见的挑战是&#xff1a;如何让多个服务实例安全地协调对共享资源的访问&#xff1f;设想这样一个场景——你部署了三个微服务实例来执行每天凌晨的数据报表生成任…

网盘直链下载助手背后的秘密:如何用VibeThinker生成Python下载脚本

网盘直链下载助手背后的秘密&#xff1a;如何用VibeThinker生成Python下载脚本 在日常开发中&#xff0c;你是否曾为批量下载网盘文件而烦恼&#xff1f;官方客户端限速、无法断点续传、缺乏进度反馈——这些问题早已成为开发者心中的“痛点”。但有没有可能&#xff0c;我们不…

离散数学(1) | 6 | 谓词逻辑的基本概念

文章同步于@c.w.-知乎,个人博客本文及其系列文章用于离散数学(1)科目的期末考试复习 一些定义和名称个体词就是命题逻辑里面的主词。包括了个体常项和个体变项。将个体变化的范围成为个体域或者论域\(D\)。谓词指的…

Swagger UI展示API接口:便于开发者快速接入

Swagger UI展示API接口&#xff1a;便于开发者快速接入 在人工智能模型日益普及的今天&#xff0c;如何让一个训练好的模型真正“用起来”&#xff0c;而不是锁在实验环境中&#xff0c;成为许多团队面临的关键挑战。尤其是对于像 VibeThinker-1.5B-APP 这样专注于数学推理与编…

GEO优化公司如何选择?2026年北京市场5家实力服务商对比与推荐 - 十大品牌推荐

在生成式人工智能(AI)深度重塑信息分发与获取范式的当下,企业品牌在AI对话答案中的“可见性”与“权威性”已取代传统搜索引擎排名,成为决定商业增长潜力的全新战略制高点。生成式引擎优化(GEO)应运而生,正从一…

揭秘Docker镜像标签混乱难题:3步构建清晰、可追溯的标签体系

第一章&#xff1a;揭秘Docker镜像标签混乱的根源Docker镜像标签&#xff08;Tag&#xff09;是标识镜像版本的重要机制&#xff0c;但实际使用中常出现标签滥用、覆盖和歧义等问题&#xff0c;导致部署不稳定与环境不一致。标签并非不可变的版本号&#xff0c;而是可被重新指向…

从零开始部署VibeThinker-1.5B-APP:Jupyter+Shell脚本快速启动教程

从零开始部署VibeThinker-1.5B-APP&#xff1a;JupyterShell脚本快速启动教程 在算法竞赛训练营里&#xff0c;一个学生正盯着LeetCode上的“两数之和”题目发愁。他没有翻题解&#xff0c;而是打开了本地AI推理界面&#xff0c;输入&#xff1a;“You are a programming assis…

Docker容器部署失控后果有多严重(真实案例曝光)

第一章&#xff1a;Docker容器部署失控的现实威胁在现代云原生架构中&#xff0c;Docker容器因其轻量、可移植和快速启动的特性被广泛采用。然而&#xff0c;缺乏规范管理的容器部署正成为企业IT安全与稳定的重大隐患。当开发团队随意创建、运行和共享容器镜像时&#xff0c;极…

如何实现零停机部署?Docker Compose + Nginx热加载配置实战(稀缺方案曝光)

第一章&#xff1a;零停机部署的核心概念与架构设计零停机部署&#xff08;Zero-Downtime Deployment&#xff09;是一种确保应用在更新过程中持续对外提供服务的技术策略。其核心目标是在发布新版本时&#xff0c;避免用户访问中断或请求失败&#xff0c;从而提升系统的可用性…

发票开具申请:企业用户购买后的财务支持

VibeThinker-1.5B-APP&#xff1a;轻量模型如何实现高阶推理突破 在大模型军备竞赛愈演愈烈的今天&#xff0c;动辄千亿参数、百万美元训练成本的“巨无霸”模型似乎成了行业标配。然而&#xff0c;当企业真正将这些庞然大物投入生产环境时&#xff0c;高昂的部署开销和复杂的运…

HTML页面自动生成器?用VibeThinker解析需求并输出结构化代码

VibeThinker&#xff1a;用15亿参数的小模型生成专业级HTML页面 在前端开发的世界里&#xff0c;一个常见的痛点是——明明只是想快速搭个作品集页面&#xff0c;却不得不反复翻查文档、调试CSS布局。有没有可能&#xff0c;我们只需一句话&#xff1a;“做个响应式网页&#x…

Falco日志分析进阶之路:从入门规则到自定义检测策略(附实战案例)

第一章&#xff1a;Falco日志分析的核心价值与应用场景Falco 是一个开源的云原生运行时安全工具&#xff0c;专注于实时检测异常行为和潜在威胁。它通过监听系统调用和容器事件&#xff0c;结合可定制的规则引擎&#xff0c;能够精准识别不符合预期的行为模式&#xff0c;为 Ku…

Kibana可视化分析:洞察用户使用行为模式

VibeThinker-1.5B&#xff1a;小模型如何实现高效推理突破 在AI大模型军备竞赛愈演愈烈的今天&#xff0c;动辄数百亿甚至万亿参数的“巨无霸”似乎成了主流。然而&#xff0c;当算力成本高企、部署门槛居高不下时&#xff0c;一个反向趋势正在悄然兴起——用更少的参数&#x…

信泰楼文具市场口碑怎么样?信泰楼马克笔质量评价及年度文具定制企业推荐 - 工业品网

本榜单依托全维度市场调研与真实行业口碑,深度筛选出五家标杆文具企业,重点围绕信泰楼系列产品口碑、品牌实力及定制服务能力展开分析,为企业选型提供客观依据,助力精准匹配适配的服务伙伴。 TOP1 推荐:汕头市新…

MongoDB存储历史记录:结构化保存问答对

MongoDB 存储历史记录&#xff1a;结构化保存问答对 在 AI 模型日益深入实际业务的今天&#xff0c;一个常被忽视却至关重要的问题浮出水面&#xff1a;我们如何记住模型“思考”过什么&#xff1f; 尤其是在数学证明、算法推导这类需要多步逻辑链的任务中&#xff0c;每一次推…

Git commit规范难统一?AI模型帮你自动生成专业提交信息

Git Commit 规范难统一&#xff1f;让 AI 帮你生成专业提交信息 在现代软件开发中&#xff0c;一个看似微不足道的环节——写 Git 提交信息&#xff0c;却常常成为团队协作中的“隐形瓶颈”。我们都有过这样的经历&#xff1a;改完代码&#xff0c;git add . 之后愣住&#xf…

C++精灵库是什么?看看这山东快板唱的。

C++精灵库是什么?看看这山东快板唱的。打竹板,响连天,听我宣传一小段!今天不夸那英雄汉,不夸水泊梁山一百单八将!咱夸一个编程好宝贝—— 叫啥?C++精灵库,绘图本领强! Python画图用 turtle,小海龟,爬呀爬,…

Zabbix监控集成:传统运维体系兼容支持

Zabbix监控集成&#xff1a;传统运维体系兼容支持 在科研与工程实践中&#xff0c;越来越多团队开始尝试将轻量级AI模型部署于本地或边缘环境&#xff0c;用于解决数学推导、算法编程等高逻辑密度任务。以微博开源的VibeThinker-1.5B-APP为例&#xff0c;这款仅15亿参数的小模型…