题目描述:

测试用例:

思路:题目给出时间复杂度为O(log n),那么就是说要用二分查找的知识来写,为了更加简便,可以分情况考虑:
【1】插入位置在两侧
1、插入到第一个元素的位置
2、插入到最后一个元素的位置
3、插入到最后一个元素的后一个
【2】插入位置在中间,利用二分查找的方式解决
需要注意的是,最后如果没有找到对应元素的话退出循环返回值为什么是right+1呢?
1、left先定位到插入位置左右

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
}