当前位置: 首页 > article >正文

C/C++---------------LeetCode第35. 搜索插入位置

插入的位置

  • 题目及要求
  • 二分查找
  • 在main内使用

题目及要求

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

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

二分查找

思路:使用二分查找,首先初始化左右指针,然后在每一次循环中,计算中间位置 mid,并与目标值进行比较。如果中间位置的元素等于目标值,则返回该位置,如果中间位置的元素大于目标值,则将右指针移动到 mid - 1 的位置,如果中间位置的元素小于目标值,则将左指针移动到 mid + 1 的位置。通过不断变化搜索范围,最终找到目标值的索引位置或应该插入的位置

class Solution {
public:
    int searchInsert(vector<int>& nums, int target) {
        int left=0,right=nums.size()-1;
        while(left<=right){
            int mid=(left+right)/2;
            if(nums[mid]==target){
                return mid; //返回目标值的索引
            }else if(nums[mid]>target){
                right=mid-1;
            }else{
                left=mid+1;
            }
        }
        return left;  //返回插入的位置
    }
};

在main内使用

int main() {
    vector<int> nums = {1, 3, 5, 6};
    int target = 4;

    Solution solution;
    int index = solution.searchInsert(nums, target);

    if (nums[index] == target) {
        cout << "目标值 " << target << " 的索引为 " << index << endl;
    } else {
        cout << "目标值 " << target << " 应该插入到索引为 " << index << " 的位置上" << endl;
    }

    return 0;
}


http://www.kler.cn/news/154995.html

相关文章:

  • C++ day48 打家劫舍
  • 数学建模之典型相关分析
  • Redis--10--Pipeline
  • 乱序学机器学习——主成分分析法PCA
  • node.js express路由和中间件
  • c++ 写成.h .cpp main.cpp 多文件形式
  • Gradio库的安装和使用教程
  • 使用Visual Studio创建第一个C代码工程
  • 二维数组处理(一)
  • 基于windows系统使用Python对于pc当前的所有窗口的相关操作接口
  • 部署springboot项目到GKE(Google Kubernetes Engine)
  • 逻辑回归与正则化 逻辑回归、激活函数及其代价函数
  • 2024年美国大学生数学建模竞赛(MCM/ICM)论文写作方法指导
  • 基于PHP的高中生物学习平台
  • prometheus|云原生|kubernetes内部安装prometheus
  • 贝锐向日葵与华为达成合作,启动鸿蒙原生应用开发
  • WPF 简单绘制矩形
  • 如何在没有备份的情况下从 Android 手机恢复已删除的数据
  • LLM推理部署(四):一个用于训练、部署和评估基于大型语言模型的聊天机器人的开放平台FastChat
  • 常见的AI安全风险(数据投毒、后门攻击、对抗样本攻击、模型窃取攻击等)
  • js中setinterval怎么用?怎么才能让setinterval停下来?
  • 微信小程序实现watch监听数值改变的效果
  • Kubernetes(K8s)_16_CSI
  • 时序预测 | Python实现LSTM长短期记忆神经网络时间序列预测(多图,多指标)
  • C#基础学习--命名空间和程序集
  • C语言之实现贪吃蛇小游戏篇(2)
  • Flink(九)【时间语义与水位线】
  • 开源播放器GSYVideoPlayer + ViewPager2 源码解析
  • 12.1 二叉树简单题
  • Redis--12--Redis分布式锁的实现