搜索插入位置
题目描述
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。
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;
}