LeetCode 力扣 热题 100道(十五)搜索插入位置(C++)

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

请必须使用时间复杂度为 O(log n) 的算法。

代码如下所示:

复制代码
class Solution {
public:
    int searchInsert(vector<int>& nums, int target) {
        int left = 0;
        int 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;
    }
};
  • int left = 0;int right = nums.size() - 1;:初始化左右指针,分别指向数组的头部和尾部。
  • while (left <= right):这个循环会持续进行,直到找到目标值或确定目标值的插入位置。
  • int mid = left + (right - left) / 2;:计算中间位置。使用 left + (right - left) / 2 来避免 left + right 可能出现的溢出问题。
  • if (nums[mid] == target):如果 mid 位置的元素等于目标值,直接返回该索引。
  • else if (nums[mid] < target):如果 mid 位置的元素小于目标值,目标值应该在 mid 右侧,更新 left = mid + 1
  • else:如果 mid 位置的元素大于目标值,目标值应该在 mid 左侧,更新 right = mid - 1
  • return left;:如果循环结束时没有找到目标值,left 将指向目标值应该插入的位置。
相关推荐
我的offer在哪里2 小时前
c++的回调函数
开发语言·c++
爱学大树锯2 小时前
592 · 查找和替换模式
算法
爱学大树锯2 小时前
775 · 回文对
算法
girl-07262 小时前
2025.12.26代码分析
数据结构·算法
大罗辑2 小时前
2026软考备考刷题:软件设计师经典100题(5)含详细解析
算法·软考·软件设计师·2026软考·软设备考
咕噜企业分发小米2 小时前
阿里云Milvus支持哪些向量检索算法?
算法·机器学习·milvus
蒙奇D索大3 小时前
【数据结构】排序算法精讲|折半插入排序全解:高效优化、性能对比、实战剖析
数据结构·学习·考研·算法·排序算法·改行学it
汽车仪器仪表相关领域3 小时前
ZDT-III 通用电机测试系统
数据库·算法·单元测试·压力测试·可用性测试
Hello eveybody3 小时前
C++四级考试要点
开发语言·c++
夏幻灵3 小时前
obj 文件
c++