【LeetCode】搜索插入位置(二分查找)

题目描述:

测试用例:

思路:题目给出时间复杂度为O(log n),那么就是说要用二分查找的知识来写,为了更加简便,可以分情况考虑:

【1】插入位置在两侧

1、插入到第一个元素的位置

2、插入到最后一个元素的位置

3、插入到最后一个元素的后一个

【2】插入位置在中间,利用二分查找的方式解决

需要注意的是,最后如果没有找到对应元素的话退出循环返回值为什么是right+1呢?

1、left先定位到插入位置左右

  1. right先定位到插入位置左右

会发现最终right和left会分别定位在要插入元素的左右,分别是比要插入元素target小和大的元素,因此是right+1或(left)

代码表示:

int searchInsert(int* nums, int numsSize, int target){
    int left=0;
    int right=numsSize-1;
    int mid=0;
    if(target<=nums[0])//插入到第一个位置的情况
        return 0;
    else if(target>nums[numsSize-1])//比任何一个数字都大
        return numsSize;
    else if(target==nums[numsSize-1])
        return numsSize-1;//插入到最后一个位置
    while(left<=right)
    {
        mid=(left+right)/2;
        if(nums[mid]<target)
        {
            left=mid+1;
        }
        else if(nums[mid]>target)
        {
            right=mid-1;
        }
        else
        {
            return mid;
        }
    }
    return right+1;
    //元素左侧值小,右侧值大,找到对应值时,right不再改变,left逐渐靠近right
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伱恏呀呀呀呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值