LeetCode 热题 100_搜索插入位置(63_35_简单_C++)(二分查找)(”>>“ 与 “/” 对比)

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

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

代码实现

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

”>>“ 与 “/” 对比

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

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

LeetCode 热题 100_搜索插入位置(63_35)原题链接
欢迎大家和我沟通交流(✿◠‿◠)

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

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

相关文章

蓝桥与力扣刷题(蓝桥 交换瓶子)

题目&#xff1a;有 N 个瓶子&#xff0c;编号 1 ~ N&#xff0c;放在架子上。 比如有 5 个瓶子&#xff1a; 2 1 3 5 4 要求每次拿起 2 个瓶子&#xff0c;交换它们的位置。 经过若干次后&#xff0c;使得瓶子的序号为&#xff1a; 1 2 3 4 5 对于这么简单的情况&#x…

HTTPS 通信流程

HTTPS 通信流程时序图&#xff1a; #mermaid-svg-HWoTbFvfih6aYUu6 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-HWoTbFvfih6aYUu6 .error-icon{fill:#552222;}#mermaid-svg-HWoTbFvfih6aYUu6 .error-text{fill:#…

Spring AutoWired与Resource区别?

大家好&#xff0c;我是锋哥。今天分享关于【Spring AutoWired与Resource区别?】面试题。希望对大家有帮助&#xff1b; Spring AutoWired与Resource区别? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Spring 中&#xff0c;Autowired 和 Resource 都是用于…

什么是HTTP/2协议?NGINX如何支持HTTP/2并提升网站性能?

HTTP/2是一种用于在Web浏览器和服务器之间进行通信的协议&#xff0c;旨在提高网站性能和加载速度。它是HTTP/1.1的继任者&#xff0c;引入了许多优化和改进&#xff0c;以适应现代Web应用的需求。HTTP/2的主要目标是减少延迟、提高效率&#xff0c;以及更好地支持并发请求。 …

【Bluedroid】AVRCP 连接源码分析(一)

一、AVRCP协议简介 AVRCP(Audio/Video Remote Control Profile)是蓝牙协议栈中的一个重要部分,它定义了蓝牙设备之间的音视频传输控制的流程和特点。AVRCP使得用户可以通过一个蓝牙设备(如手机)远程控制另一个蓝牙设备(如蓝牙耳机或音箱)上的音视频播放,如播放、暂停、…

【QT中的一些高级数据结构,持续更新中...】

QT中有一些很精妙、便捷的设计&#xff0c;在了解这些数据的同时&#xff0c;我们可以学到如何更好的设计代码。本贴持续更新中&#xff0c;欢迎关注和收藏 一 QScopedPointer主要特点&#xff1a;示例代码 二 Q_DISABLE_COPY 一 QScopedPointer QScopedPointer 是 Qt 中的一种…

行业分析---对自动驾驶规控算法的思考

1 前言 随着自动驾驶端到端大模型的兴起&#xff0c;小鹏、华为、理想、蔚来、小米等公司都对自动驾驶业务部进行了组织架构的调整&#xff0c;准备应对新的或者更高级别的自动驾驶研发任务。 近几年由于自动驾驶技术的快速发展&#xff0c;不少从业者觉得相关职业的未来充满了…

C++ 设计模式-模板方法模式

文件处理 #include <iostream>// 抽象基类&#xff1a;定义模板方法和抽象步骤 class DataProcessor { public:// 模板方法&#xff08;固定流程&#xff09;void Process() {OpenFile();ProcessData(); // 由子类实现CloseFile();}protected:virtual void ProcessData…

Deepseek快速做PPT

背景: DeepSeek大纲生成 → Kimi结构化排版 → 数据审查,细节调整 DeepSeek 拥有深度思考能力,擅长逻辑构建与内容生成,它会根据我们的问题进行思考,其深度思考能力当前测试下来,不愧为国内No.1,而且还会把中间的思考过程展示出来,大多时候会给出很多我们意想不到的思…

【多语言生态篇一】【DeepSeek×Java:Spring Boot微服务集成全栈指南 】

(手把手带你从零实现AI能力调用,万字长文预警,建议收藏实操) 一、环境准备:别输在起跑线上 1.1 硬件软件全家桶 JDK版本:必须 ≥17(Spring Boot 3.2+强制要求,低版本直接报错)IDE推荐:IntelliJ IDEA终极版(社区版缺Spring AI插件支持)构建工具:Maven 3.9+ / Grad…

【YOLOv8】损失函数

学习视频&#xff1a; yolov8 | 损失函数 之 5、类别损失_哔哩哔哩_bilibili yolov8 | 损失函数 之 6、定位损失 CIoU DFL_哔哩哔哩_bilibili 2.13、yolov8损失函数_哔哩哔哩_bilibili YOLOv8 的损失函数由类别损失和定位损失构成 类别损失&#xff1a;BCE Loss 定位损失…

DEMF模型赋能多模态图像融合,助力肺癌高效分类

目录 论文创新点 实验设计 1. 可视化的研究设计 2. 样本选取和数据处理 3. 集成分类模型 4. 实验结果 5. 可视化结果 图表总结 可视化知识图谱 在肺癌早期筛查中,计算机断层扫描(CT)和正电子发射断层扫描(PET)作为两种关键的影像学手段,分别提供了丰富的解剖结构…

小鱼深度评测 | 通义灵码2.0,不仅可跨语言编码,自动生成单元测试等,更炸裂的是集成DeepSeek模型且免费使用,太炸裂了。

小鱼深度评测 通义灵码2.0 1、引言2、通义灵码 更新与安装2.1 IDE插件更新2.1.1 PyCharm 更新2.1.2 VSCode 更新 2.2 官网下载更新 3、 使用体验3.1生成单元测试3. 2 跨语言编程3.3灵码2.0 与1.0 对比 4、总结 1、引言 通义灵码&#xff0c; 我一直使用的编码协助工具&#xf…

《微软量子芯片:开启量子计算新纪元》:此文为AI自动生成

量子计算的神秘面纱 在科技飞速发展的今天,量子计算作为前沿领域,正逐渐走进大众的视野。它宛如一把神秘的钥匙,有望开启未来科技变革的大门,而微软量子芯片则是这把钥匙上一颗璀璨的明珠。 量子计算,简单来说,是一种遵循量子力学规律调控量子信息单元进行计算的新型计算…

深度解读DeepSeek:从原理到模型

一、大模型模型发展路线退 二、DeepSeek V2-V3/R1技术原理 DeepSeek V2、V3 和 R1 模型架构优化要点&#xff1a; 1、‌DeepSeek V2‌ 混合专家架构&#xff08;DeepSeekMoE&#xff09;‌&#xff1a;采用细粒度专家划分与共享专家机制&#xff0c;总参数规模达236B但仅激活…

easyexcel 2.2.6版本导出excel模板时,标题带下拉框及其下拉值过多不显示问题

需求背景&#xff1a;有一个需求要做下拉框的值有100多条&#xff0c;同时这个excel是一个多sheet的导入模板 直接用easyexcel 导出&#xff0c;会出现下拉框的值过多&#xff0c;导致生成出来的excel模板无法正常展示下拉功能 使用的easyexcel版本&#xff1a;<depende…

基于WebRTC与AI大模型接入EasyRTC:打造轻量级、高实时、强互动的嵌入式音视频解决方案

随着物联网和嵌入式技术的快速发展&#xff0c;嵌入式设备对实时音视频通信的需求日益增长。然而&#xff0c;传统的音视频解决方案往往存在体积庞大、实时性差、互动体验不佳等问题&#xff0c;难以满足嵌入式设备的资源限制和应用场景需求。 针对以上痛点&#xff0c;本文将介…

AI工作流+专业知识库+系统API的全流程任务自动化

我有点悲观&#xff0c;甚至很沮丧&#xff0c;因为AI留给普通人的机会不多了&#xff0c;这既是人类之间权力的斗争&#xff0c;也是硅基生命和碳基生命的斗争。AI自动化是无法避免的趋势&#xff0c;如果人类不能平权&#xff0c;那就只能跪下接受审判。 通过整合AI工作流、专…

Lua | 每日一练 (3)

&#x1f4a2;欢迎来到张胤尘的技术站 &#x1f4a5;技术如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 Lua | 每日一练 (3)题目参考答案减少查找次数预分配表…

二叉树(中等题)

1、先序&#xff0c;中序遍历确定二叉树 105 方法一、 前提 ① 必须不能有重复元素② 只有先序&#xff0b;中序和后序&#xff0b;中序才能实现唯一树 思考要点&#xff1a; 不要想着用for循环&#xff0c;递归一定更好解决输入是vector&#xff0c;递归就得考虑传入索…