![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/1d414c16a3e8dc873b579b9310923448.png)
题目要求时间复杂度为o(log n),所以不能遍历数组,维护3个指针,
p为数组的首指针,初始为0,q为数组的尾指针,初始为数组长度,
mid为中间指针,初始为(p+q)/2;让mid所指的数组对应元素与target做比较
若大于,则p=mid;若小于,则q=mid,mid=(p+q)/2;最终p=mid或者q=mid
跳出循环,返回对应的下标。
int searchInsert(int* nums, int numsSize, int target){
int p = 0, q = numsSize;
if (target < nums[p])
return p;
if (target > nums[q - 1])
return q;
int mid = (q + p) / 2;
if (nums[mid] == target)
return mid;
while (p != mid && q != mid)
{
if (nums[mid] == target)
return mid;
if (nums[mid] < target)
{
p = mid;
}
if (nums[mid] > target)
{
q = mid;
}
mid = (q + p) / 2;
if (nums[mid] == target)
return mid;
}
if (q == mid)
return p;
if (p == mid)
return q;
return 0;
}
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e6424f583d488565355aa3d200d54cf6.png)
看了官方的解法,标准的二分算法,自己写的太复杂