LeetCode 算法:搜索插入位置 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. 算法步骤

    1. 初始化:设置两个指针,left 指向数组的起始位置,right 指向数组的结束位置。
    2. 循环条件:当 left 小于等于 right 时,继续循环。
    3. 计算中间位置:计算中间索引 mid,通常使用 (left + right) // 2(使用整数除法以避免浮点数结果)。
    4. 比较
      • 如果 nums[mid] 等于目标值,返回 mid,表示找到了目标值的位置。
      • 如果 nums[mid] 大于目标值,移动 rightmid - 1,排除数组中间到 right 的部分。
      • 如果 nums[mid] 小于目标值,移动 leftmid + 1,排除数组 left 到中间的部分。
    5. 结束循环:当 left 大于 right 时,循环结束,表示没有找到目标值,此时 left 的位置就是目标值应该插入的位置,以保持数组的有序性。
  2. 复杂度分析

    • 时间复杂度:O(log n),其中 n 是数组的长度。这是因为每次比较后,搜索范围减半。
    • 空间复杂度:O(1),因为二分查找不需要额外的存储空间。
  3. 代码示例(Python)

def binary_search(nums, target):left, right = 0, len(nums) - 1while left <= right:mid = (left + right) // 2if nums[mid] == target:return midelif nums[mid] < target:left = mid + 1else:right = mid - 1return left  # 如果没有找到,返回left作为插入位置
  1. 注意事项

    • 二分查找要求数组是有序的,无论是升序还是降序。
    • 如果数组中有重复的元素,二分查找仍然有效,但可能不会返回第一个或最后一个匹配项的索引。
    • 在实际应用中,如果数组非常大,需要考虑整数溢出的问题,可以通过 left + (right - left) // 2 来避免这个问题。
  2. 二分查找是一种非常高效的搜索算法,适用于大规模数据集的查找任务。

题解

  1. 解题思路

LeetCode 上的 “搜索插入位置”(Search Insert Position)是一道非常经典的二分查找问题。题目要求你给定一个已排序的整数数组 nums 和一个目标值 target,找出 target 插入到数组中后,数组仍然保持有序的位置。
解题思路

  • 二分查找:由于数组是有序的,可以使用二分查找算法来确定目标值的位置。
  • 初始化:定义两个指针 left 和 right,分别指向数组的开始和结束。
  • 循环条件:当 left 小于等于 right 时,继续循环。
  • 计算中间位置:计算中间位置 mid,通常使用 (left + right) / 2。
  • 比较:
    • 如果 nums[mid] 等于 target,则返回 mid。
    • 如果 nums[mid] 小于 target,则将 left 更新为 mid + 1。
    • 如果 nums[mid] 大于 target,则将 right 更新为 mid - 1。
  • 返回结果:循环结束后,left 将指向 target 应该插入的位置。
  1. c++ demo
#include <iostream>
#include <vector>// 函数声明
int searchInsert(std::vector<int>& nums, int target);int main() {// 测试用例std::vector<int> nums = { 1, 3, 5, 6 };int target = 5;// 调用函数并输出结果int insertPosition = searchInsert(nums, target);std::cout << "Insert position for target " << target << " is: " << insertPosition << std::endl;return 0;
}// 搜索插入位置的函数实现
int searchInsert(std::vector<int>& nums, int target) {int left = 0, right = nums.size() - 1;while (left <= right) {int mid = left + (right - left) / 2; // 防止溢出if (nums[mid] == target) {return mid;}else if (nums[mid] < target) {left = mid + 1;}else {right = mid - 1;}}return left; // 循环结束后,left指向插入位置
}
  • 输出结果:

Insert position for target 5 is: 2

  1. 代码仓库地址:searchInsert

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

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

相关文章

Python | TypeError: ‘module’ object is not callable

Python | TypeError: ‘module’ object is not callable 在Python编程中&#xff0c;遇到“TypeError: ‘module’ object is not callable”这类错误通常表明你尝试像函数一样调用了一个模块。这种错误通常是由于导入模块时的疏忽或误解导致的。本文将深入探讨此错误的根源&…

2024年7月23日~2024年7月29日周报

目录 一、前言 二、完成情况 2.1 一种具有边缘增强特点的医学图像分割网络 2.2 融合边缘增强注意力机制和 U-Net 网络的医学图像分割 2.3 遇到的困难 三、下周计划 一、前言 上周参加了一些师兄师姐的论文讨论会议&#xff0c;并完成了初稿。 本周继续修改论文&#xff0…

vivado LOC

LOC LOC指定逻辑单元对目标SITE资源的放置分配 Xilinx部分。 LOC属性或约束有时与BEL属性一起使用&#xff0c;以定义精确的 将细胞放置在设备内。在这些情况下&#xff0c;必须定义BEL约束 否则将发生放置错误。 提示&#xff1a;要将I/O端口分配给设备包上的物理引脚&#xf…

大语言模型系列——Transformer 介绍与使用

引言 自从 Google 在 2017 年发表了一篇题为《Attention Is All You Need》的论文以来&#xff0c;Transformer 已经成为了自然语言处理领域的一个重要里程碑。与传统的 RNN 和 LSTM 不同&#xff0c;Transformer 通过自注意力机制&#xff08;Self-Attention Mechanism&#…

使用eclipse在新建的java项目中编辑xml文件时Unhandled event loop exception No more handles

处理方法&#xff1a;更换xml编辑器 Window ——》Preferences ——》General ——》Editors ——》File Associations 如果File types里面没有*.xml&#xff0c;则点击Add进行新增 选中*.xml&#xff0c;然后在Associated editors 选中想用的编辑器&#xff0c;设置为defaul…

Selenium---Xpath选择器

XPath (XML Path Language) 是由国际标准化组织W3C指定的&#xff0c;用来在 XML 和 HTML 文档中选择节点的语言。 xpath 语法中&#xff0c;整个HTML文档根节点用/表示&#xff0c;如果我们想选择的是根节点下面的html节点&#xff0c;则可以在搜索框输入 /html如果输入下面…

vpp中的不同节点的数据传输,使用vpp中的回调函数,相同的原理也可以实现,不同节点的函数的调用

vpp中的不同节点的数据传输&#xff0c;使用vpp中的回调函数&#xff0c;相同的原理也可以实现&#xff0c;不同节点的函数的调用 1.实现数据传输所需要用到的函数2.具体实现 1.实现数据传输所需要用到的函数 需要用到的一个宏__clib_export 作用&#xff1a;就是将这后边的…

小白也能读懂的ConvLSTM!(开源pytorch代码)

ConvLSTM 1. 算法简介与应用场景2. 算法原理2.1 LSTM基础2.2 ConvLSTM原理2.2.1 ConvLSTM的结构2.2.2 卷积操作的优点 2.3 LSTM与ConvLSTM的对比分析2.4 ConvLSTM的应用 3. PyTorch代码参考文献 仅需要网络源码的可以直接跳到末尾即可 1. 算法简介与应用场景 ConvLSTM&#x…

app-routing.module.ts 简单介绍

Angular的路由是一种功能&#xff0c;它允许应用程序响应不同的URL路径或参数并根据这些路径加载不同的组件。app-routing.module.ts是Angular项目中负责设置应用程序路由的文件。 以下是一个简单的app-routing.module.ts文件示例&#xff0c;它配置了三个路由&#xff1a; i…

SAPUI5基础知识22 - 图标(Icons)

1. 背景 SAPUI5 提供了一套丰富的图标库&#xff0c;可以用于增强应用程序的视觉吸引力和用户体验。这些图标是矢量图形&#xff0c;可以在任何分辨率下保持清晰&#xff0c;并且可以自定义颜色和大小。 2. 示例 在 SAPUI5 中&#xff0c;图标可以通过 sap.ui.core.Icon 控件…

Redis快速入门基础

Redis入门 Redis是一个基于内存的 key-value 结构数据库。mysql是二维表的接口数据库 优点&#xff1a; 基于内存存储&#xff0c;读写性能高 适合存储热点数据(热点商品、资讯、新闻) 企业应用广泛 官网:https://redis.io 中文网:https://www.redis.net.cn/ Redis下载与…

Spring缓存注解

Spring缓存注解 EnableCaching | 来启动缓存注解Cached | 用来表示某一个方法的结果可以被缓存 Cached(name “testCache:id1:”, key “#testId”, cacheType CacheType.REMOTE, localLimit CustomerConstants.DEFAULT_LIMIT, expire 1800)方法方法上。 #相关参数&#…

The Llama 3 Herd of Models 第6部分推理部分全文

第1,2,3部分 介绍,概览和预训练 第4部分 后训练 第5部分 结果 6 Inference 推理 我们研究了两种主要技术来提高Llama 3405b模型的推理效率:(1)管道并行化和(2)FP8量化。我们已经公开发布了FP8量化的实现。 6.1 Pipeline Parallelism 管道并行 当使用BF16数字表示模型参数时…

家具购物小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;家具分类管理&#xff0c;家具新品管理&#xff0c;订单管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;家具新品&#xff0c;家具公告&#xff0…

【开发学习笔记】git的工作区与分支

Git是一款分布式版本控制系统&#xff0c;被广泛应用于软件开发中&#xff0c;用于跟踪和管理项目的源代码。在Git中&#xff0c;工作区与分支是两个核心概念&#xff0c;它们在Git的工作流程中扮演着不同的角色。 工作区的概念 工作区&#xff08;Working Directory&#xf…

Linux网络——深入理解传入层协议TCP

目录 一、前导知识 1.1 TCP协议段格式 1.2 TCP全双工本质 二、三次握手 2.1 标记位 2.2 三次握手 2.3 捎带应答 2.4 标记位 RST 三、四次挥手 3.1 标记位 FIN 四、确认应答(ACK)机制 五、超时重传机制 六 TCP 流量控制 6.1 16位窗口大小 6.2 标记位 PSH 6.3 标记…

YOLOv5改进 | 卷积模块 | 无卷积步长用于低分辨率图像和小物体的新 CNN 模块SPD-Conv

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录&#xff1a; 《YOLOv5入门 改…

[ WARN:0@0.014] global loadsave.cpp:248 cv::findDecoder imread_

[ WARN:00.014] global loadsave.cpp:248 cv::findDecoder imread_ 目录 [ WARN:00.014] global loadsave.cpp:248 cv::findDecoder imread_ 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰…

20240729 每日AI必读资讯

Meta科学家最新采访&#xff0c;揭秘Llama 3.1是如何炼成的 - Llama 3.1都使用了哪些数据&#xff1f;其中有多少合成数据&#xff1f;为什么不使用MoE架构&#xff1f;后训练与RLHF流程是如何进行的&#xff1f;模型评估是如何进行的&#xff1f; - 受访者Thomas Scialom现任…

ReactHooks(二)

上期在这~ ReactHooks【二】 一.useReducer1.1 useReducer 的语法格式1.2 定义组件的基础结构1.3 定义 useReducer 的基础结构1.3.1按需导入 useReducer 函数1.3.2定义初始数据1.3.3 定义 reducer 函数根据旧状态&#xff0c;进行一系列处理&#xff0c;最终返回新状态&#x…