35、Search Insert Position
搜索插入位置
给定一个排序数组和一个目标值,如果在数组中找到目标值则返回索引。如果没有,返回到它将会被按顺序插入的位置。
你可以假设在数组中无重复元素。
样例
[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:
class Solution {//正常二分查找,返回mid
public:
int searchInsert(vector<int>& nums, int target) {
if(nums.size()<0)return 0;
int lo=0,hi=nums.size()-1;
while(lo<=hi)
{
int mid=lo+(hi-lo)/2;
if(nums[mid]==target)return mid;
if(nums[mid]<target)lo=mid+1;
else hi=mid-1;
}
return lo;
}
};
代码2:
class Solution {//返回最左边符合的数
public:
int searchInsert(vector<int>& nums, int target) {
if(nums.size()<0)return 0;
int lo=0,hi=nums.size();
while(lo<hi)
{
int mid=lo+(hi-lo)/2;
if(nums[mid]<target)lo=mid+1;
else hi=mid;
}
return lo;
}
};