LeetCode 35. 搜索插入位置 (C++实现)

1. 题目描述

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

请必须使用时间复杂度为 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

2. 解题思路

首先定义左指针left和右指针right,然后取数组中间元素的值和target比较,如果中间元素的值大于target,则右指针指向中间元素,如果中间元素的值小于target,则左指针指向中间元素,直到中间元素等于target。最后,如果没有找到,则右指针的下一位就是插入的位置。

3. 代码实现

cpp 复制代码
class Solution {
public:
    int searchInsert(vector<int>& nums, int target) {
        int left = 0;
        int right = nums.size() - 1;
        while(left <= right)
        {
            int middle = left + (right - left) / 2;
            if(nums[middle] > target)
            {
                right = middle - 1;
            }
            else if(nums[middle] < target)
            {
                left = middle + 1;
            }
            else
            {
                return middle;
            }
        }
        return right + 1;
    }
};
相关推荐
睡醒了叭4 分钟前
图像分割-传统算法-区域分割
图像处理·人工智能·算法·计算机视觉
代码游侠20 分钟前
复习——网络基础知识
网络·笔记·网络协议·算法·http
沈阳信息学奥赛培训30 分钟前
CCF GESP 2025/12/24 模拟测试 C++ 4级 编程题2
数据结构·算法
dddddppppp12331 分钟前
c 模拟一个fat16文件系统
c语言·c++·算法
行走的bug...1 小时前
利用计算机辅助数学运算
人工智能·算法·机器学习
挖矿大亨1 小时前
C++中左移运算符重载
开发语言·c++
CoderCodingNo1 小时前
【GESP】C++五级真题(数论-素数、贪心思想考点) luogu-B4050 [GESP202409 五级] 挑战怪物
开发语言·c++·算法
小O的算法实验室1 小时前
2026年AEI SCI1区TOP,基于多策略集成粒子群算法+无人机平滑覆盖路径规划,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
~光~~1 小时前
【记录——内核模块加载到内核】基于鲁班猫4 rk3588s
c++·学习·rk3588s
老王熬夜敲代码1 小时前
C++模版元编程2
开发语言·c++