题目:
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 1:
输入: [1,3,5,6], 5
输出: 2
示例 2:
输入: [1,3,5,6], 2
输出: 1
示例 3:
输入: [1,3,5,6], 7
输出: 4
示例 4:
输入: [1,3,5,6], 0
输出: 0
思路:用二分查找查询第一个大于等于target的数字。要特别注意一种情况是如果target大于所有数,那么二分查找无法找到比其大的数,要在二分查找之前作出处理。
int searchInsert(vector<int> &nums,int target)
{
int len = nums.size();
if(len==0)
return -1;
//target大于所有数,二分查找无法找到比其大的数
if(target>nums[len-1])
return len;
int l = 0,r = len-1;
while(l<r)
{
int m = l+(r-l)/2;
if(nums[m]==target)
return m;
if(nums[m]<target)
l = m+1;
else
r = m;
}
return r;
}