Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.
You may assume no duplicates in the array.
Here are few examples.
[1,3,5,6], 5 → 2
[1,3,5,6], 2 → 1
[1,3,5,6], 7 → 4
[1,3,5,6], 0 → 0
Hide Tags Array Binary Search
1.直观思维
int searchInsert(vector<int>& nums, int target) {
int i;
for(i=0; i<nums.size(); i++){
if(target==nums[i])
return i;
else if(i>0 && target<nums[i] && target>nums[i-1])
return i;
else if(i==0 && target<nums[i])
return 0;
else if(i==nums.size()-1 && target>nums[i])
return nums.size();
}
}
2.二分查找
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。
假设其数组长度为n,其算法复杂度为o(log(n))
int searchInsert(vector<int>& nums, int target) {
int len,start,end,mid;
len = nums.size();
end = len-1;
start = 0;
while (end >= start){//记得等于号
mid = (end+start)/2;
if(nums[mid] < target)
start = mid+1;
else if(nums[mid] > target)
end = mid-1;
else
return mid;
}
return start;
}