题目
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
思路
标准的二分模板题。
每次取有序数组最中间位置,将比较目标和该数据进行对比,小于则取小的那一部分继续二分,大于同理,直到找到最终位置。二分想法虽然简单,但一些边界问题还是需要注意一下。
代码
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
int left=0,right = nums.size()-1;
while(left<right){
int mid = (left+right)/2;
if(nums[mid]==target){
return mid;
}else if(nums[mid]>target){
right = mid-1;
}else{
left = mid+1;
}
}
if(nums[left]==target){
return left;
}else if(nums[left]<target){
return left+1;
}else{
return left;
}
}
};