给定一个排序数组nums(无重复元素)与目标值target,如果target在nums里 出现,则返回target所在下标,如果target在nums里未出现,则返回target应该 插入位置的数组下标,使得将target插入数组nums后,数组仍有序。
LeetCode 35. Search Insert Position
算法设计
设元素所在的位置(或最终需要插入的位置)为index,
在二分查找的过程中,index的更新方法:
如果target == nums[mid]:index = mid;
如果target < nums[mid],且 (mid == 0或 target > nums[mid-1]):
index = mid;
如果target > nums[mid],且 (mid == nums.size() – 1 或 target < nums[mid+1]):
index = mid + 1;
class Solution{
public:
int searchInsert(std::vector<int> &nums, int target){
int index = -1;//最终返回的下标,否则为需要插入的位置;
int begin = 0;
int end = noms.size() -1;
while( index == -1){//若index == -1,则说明还未找到正确位置,持续二分搜索
int mid == (begin + end) / 2;
if(target ==nums[mid]){
index = mid;
}
else if(target < nums[mid]){
if(mid == 0 || target > nums[mid-1]){
index = mid;
}
end = mid -1;
}
else if(target > nums[mid] || mid == nums.size()-1){
if(target < nums[mid+1]){
return index = mid+1;
}
begin = mid +1 ;
}
}
return index;
}
};