• Leetcode刷题详解——搜索插入位置


    1. 题目链接:35. 搜索插入位置

    2. 题目描述:

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

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

    示例 1:

    输入: nums = [1,3,5,6], target = 5
    输出: 2
    
    • 1
    • 2

    示例 2:

    输入: nums = [1,3,5,6], target = 2
    输出: 1
    
    • 1
    • 2

    示例 3:

    输入: nums = [1,3,5,6], target = 7
    输出: 4
    
    • 1
    • 2

    提示:

    • 1 <= nums.length <= 104
    • -104 <= nums[i] <= 104
    • nums无重复元素升序 排列数组
    • -104 <= target <= 104

    3. 算法思路(二分查找)

    • 设插入坐标为index,根据插入位置的特点可以知道:

      • [left,index-1]内所有元素均是小于target
      • [index,right]内所有元素均是大于等于target
    • left为左边界,right为有边界,根据mid位置的信息,决定下一轮的区间范围:

      • nums[mid]>=target时,说明mid落在了[index,right]区间上,mid包括mid本身,可能是最终结果,所以我们接下来查找的区间在[left,mid]上。因此更新rightmid位置,继续查找
      • nums[mid]时,说明mid落在了[left,index-1]区间上,mid右边但不包括mid本身,可能是最终结果,所以我们接下来查找的区间在[mid+1,right]上。因此更新leftmid+1的位置,继续查找
    • 直到我们的查找结果的长度变为1,也就是left==right的时候,left或者right所在的位置就是我们要找的结果

    请添加图片描述

    4. C++算法代码

    class Solution {
    public:
        int searchInsert(vector& nums, int target) {
            int left=0,right=nums.size()-1;
            while(left
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
  • 相关阅读:
    微信小程序开发学习—Day2
    全新UI基于Thinkphp的最新自助打印系统/云打印小程序源码/附教程
    idea插件推荐
    Addflow for WPF 2019 Crack
    1024 特别企划|揭秘 StarRocks 社区背后的神秘力量(内涵福利)
    Linux系统Ubuntu配置Docker详细流程
    Unity把余弦值转成弧度和角度
    经典背包系列问题
    openvswitch学习
    Hbase分布式集群部署
  • 原文地址:https://blog.csdn.net/weixin_51799303/article/details/134021477