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 将指向目标值应该插入的位置。
相关推荐
Zachary_zlc6 小时前
有向无环图检测算法和关键路径算法
算法
你撅嘴真丑6 小时前
素数回文数的个数 与 求分数序列和
算法
Wuliwuliii6 小时前
贡献延迟计算DP
数据结构·c++·算法·动态规划·dp
苦藤新鸡6 小时前
2.字母异位词分组
c语言·c++·力扣·哈希算法
ysn111116 小时前
简单多边形三角剖分---耳切法(含源码)
算法
e疗AI产品之路6 小时前
一文介绍Philips DXL心电图算法
算法·pan-tompkins·心电分析
YGGP6 小时前
【Golang】LeetCode 21. 合并两个有序链表
leetcode·链表·golang
小袁顶风作案6 小时前
leetcode力扣——135.分发糖果
算法·leetcode·职场和发展
AAA.建材批发刘哥6 小时前
02--C++ 类和对象上篇
开发语言·c++