题目:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
解法及思路:
//时间复杂度为O(logn) 即是要求二分法
int searchInsert(int* nums, int numsSize, int target){
int left = 0;
int right = numsSize - 1;
while(left <= right)
{
int middle = (left + right)/2;
if(target > nums[middle])//当目标值大于中间值,则去[middle+1,right]中查找
left = middle + 1;
else if(target < nums[middle])//当目标值小于中间值,则去[left,middle-1]中查找
right = middle - 1;
else
return middle;
}
//一直搜索到极限,当left = right时,middle值也为该值,可能存在target = middle的情况,因此上面的判断可以是小于等于
//而当left>right,证明不存在目标值,此时,顺序插入的位置即为此时的left位置
return left;
}