搜索插入位置

 

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

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

int searchInsert(int* nums, int numsSize, int target)
{
    int left=0;
    int right=numsSize-1;
    while(left<=right)
    {
        int middle=left+((right-left)/2);
        if(nums[middle]>target)
        {
            right=middle-1;
        }
        else if(nums[middle]<target)
        {
            left=middle+1;
        }
        else
        {
            return middle;
        }
    }
    return right+1;
}

由于题目要求时间复杂度为logn阶所以无法进行暴力枚举因为这样时间复杂度为n阶,运用二分法可以实现,首先定义左右两个区间,再找到中间值即为(left+right)/2为了防止溢出采用了以上写法,再而比较目标值与中间值的大小关系,以此确定目标在左区间还是右区间,再依次缩小区间长度以找到目标值,若无则插入在right+1