题目描述:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
解题思路:采用二分法。
代码:
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
//若数组为空,则插入值为第一个元素,即位置为0
if(nums.empty())
return 0;
int n=nums.size();
int left=0,right=n-1;
//若目标值小于第一个元素,则放在第一位,即返回left=0
if(nums[left]>=target)
return left;
//若目标值大于最后一个元素,则放在最后一位,即返回right+1
if(nums[right]<target)
return right+1;
//二分查找
while(left<=right){
int mid=left+(right-left)/2;
if(nums[mid]==target)
return mid;
else if(nums[mid]<target)
left=mid+1;
else
right=mid-1;
}
//当二分搜索到最后不能找到,即为该处
return left;
}
};