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
思路:运用二分搜索法,然后就是根据不同的情况来进行判断:如果找目标值返回响应下标值,如果当middle<target且middle+ 1>target
代码如下:
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
int front,back,middle;
front =0;back=nums.size()-1;
middle = (front+back)/2;
while(front <= back)
{
if(nums[middle] < target)
{
if(middle < nums.size()-1 && nums[middle+1] > target)
return middle+1;
front = middle+1;
middle = (front+back)/2;
}
else if(nums[middle] > target)
{
if(middle > 0 && nums[middle-1] < target)
return middle;
back = middle-1;
middle = (front+back)/2;
}
else
return middle;
}
if(nums[middle] < target)
return middle+1;
else
return middle;
}
};