Search Insert Position
Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.
You may assume no duplicates in the array.
Here are few examples.
[1,3,5,6]
, 5 → 2
[1,3,5,6]
, 2 → 1
[1,3,5,6]
, 7 → 4
[1,3,5,6]
, 0 → 0
假设数组中没有重复的数字。
例如:
[1,3,5,6]
, 5 → 2
[1,3,5,6]
, 2 → 1
[1,3,5,6]
, 7 → 4
[1,3,5,6]
, 0 → 0
分析:
法1:顺序查找数组,直到找到大于等于目标值的第一个位置,该位置就是要找的位置。复杂度 O(n)。
int searchInsert(int* nums, int numsSize, int target) {
int index = 0;
if(!nums)
return -1;
for(; index < numsSize; ++index)
{
if(nums[index] < target)
{
continue;
}
else if(nums[index] >= target)
{
return index;
}
}
return index;
}
法2:二分法查找,查找大于等于目标值的位置。复杂度 O(logn)。
int searchInsert(int* nums, int numsSize, int target) {
int low = 0, high = numsSize-1;
int mid = 0;
if(!nums)/*空指针*/
{
return 0;
}
/*二分查找*/
while(low <= high)
{
mid = (low + high)/2;
if(nums[mid] == target)/*在数组中*/
{
return mid;
}
else if(nums[mid] < target)
{
low = mid + 1;
}
else
{
high = mid - 1;
}
}
if(nums[mid] < target)/*不在数组中,数组中最后参与比较的值的索引是mid*/
{
return (mid+1);
}
return mid;
}