每日一题——搜索插入位置(二分查找)

简介: 每日一题——搜索插入位置(二分查找)

搜索插入位置

题目链接

思路(实现代码)

  • 看到这是一个无重复元素的升序排列数组,且题目规定时间复杂度为O(logn),那么我们可以很容易的想到这题要用二分查找算法
  • 如果目标值存在,那好办,就是普通的二分查找。但题目还要求,如果目标值不存在于数组,那么还要返回它将被按顺序插入的位置。那么怎么找到要插入的位置呢?
  • 先展示实现代码
int searchInsert(int* nums, int numsSize, int target){
    int left = 0;
    int right = numsSize - 1;
    while(left <= right)
    {
        int mid = (right - left) / 2 + left;    //为防止right + left发生整型溢出,故用此方法计算
        if(nums[mid] < target)
            left = mid + 1;
        else if(nums[mid] > target)
            right = mid - 1;
        else
            return mid;
    }
    return left;
}
  • 为什么就是直接插入在left位置呢,想了很久,感觉还是举例子画图更容易理解。
  • 首先我们需要明确,若已知数组中不存在目标元素target,那么进行最后一次while循环时,left必定等于right(如下图)

  • 通过图形的分析,我们确实可以确定若·targett不存在,那么left就是要插入的下标位置

PS:笔者对这题的思路可能也不是太准确,欢迎大家的斧正。


相关文章
|
8月前
|
vr&ar
leetcode每日一题 2021/4/7 81. 搜索旋转排序数组 II
leetcode每日一题 2021/4/7 81. 搜索旋转排序数组 II
31 0
|
2月前
|
算法 索引
【力扣】35. 搜索插入位置
【力扣】35. 搜索插入位置
|
2月前
|
C++ 索引 Python
leetcode-35:搜索插入位置
leetcode-35:搜索插入位置
26 0
|
算法 安全 Swift
LeetCode - #35 搜索插入位置
不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。
|
索引
leetcode:35.搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
33 0
搜索插入位置力扣35
搜索插入位置力扣35
50 0
|
算法 索引
LeetCode:35. 搜索插入位置
题目描述:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。
|
Java C++ 索引
leetcode 35 搜索插入位置
leetcode 35 搜索插入位置
71 0
|
算法 索引
【力扣】搜索插入位置 学习大神的二分法查找
【力扣】搜索插入位置 学习大神的二分法查找
【力扣】搜索插入位置 学习大神的二分法查找