给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
例如:
输入:【1,3,5,6】 ,2
输出:1(将会被按顺序插入的位置)
输入:【1,2,3,4】 3
输出 :2 (3所在的位置)
方法一:
直接粗暴的方法 ,时间复杂度是O(n)
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
if(nums.size()<=0||target<nums[0])
return 0;
int i=0;
for(;i<nums.size();i++)
{
if(nums[i]>=target)
return i;
}
return i;
}
};
方法二:
见到有序数组就想到二分法!!!
二分法的时间复杂度是O(logn)
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
if(nums.size()<=0)
return 0;
int l=0;
int r=nums.size()-1;
int mid;
while(l<=r)
{
mid=(r+l)/2;
if(nums[mid]>target)
r=mid-1;
else if(nums[mid]<target)
l=mid+1;
else
return mid;
}
return l;
}
};