插入搜索位置 C语言

搜索插入位置

题目描述

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

1.拿到这个题最简单的思路就是直接遍历,先寻找数组元素中的元素有没有与给定值相同,如果有,就输出与与他相等数组元素的下标;如果没有,就遍历数组,找到合适的位置。

int searchInsert(int* nums, int numsSize, int target){
int i;
for(i = 0;i<numsSize;i++)
{
    if(target == nums[i])
    {
        return i;
    }
}
for(i = 0;i<numsSize;i++)
{
    if(target <= nums[i]) 
    {
        return i;
    }
}
return numsSize;
}

2.更高端的方法是二分法,思路为将这个数组分为2段,然后找到该数组的中间值,比较给定值与中间值的大小,如果大于中间值,则在数组右半边再找到中间值,在进行比较。反之一样。
代码如下

int searchInsert(int* nums, int numsSize, int target){
   int l,r;
   r=numsSize-1;
   while(l<=r)
   {   int m=(l+r)/2;
       if(target==nums[m])
           return m;
       else if(nums[m]>target)
           r=m-1;
       else 
           l=m+1;
   }
   return l;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值