原题链接:力扣
本题要求必须使用时间复杂度为 O(log n)
的算法,所以用二分查找。
int searchInsert(vector<int>& nums, int target) {
//要求时间复杂度为O(log n),使用二分查找
if (target <= nums[0]) return 0;
if (target > nums[nums.size() - 1]) return nums.size();
int left = 0;
int right = nums.size() - 1;
int mid = (left + right) / 2;
bool flags = true;
while (flags){
if (target >= nums[left] && target <= nums[mid]){
if (target == nums[left])return left;
if (target == nums[mid])return mid;
if (left == (mid - 1)) return left + 1;
//左半区域
if (left < mid){
right = mid;
mid = (left + right) / 2;
}
else{
if (nums[left] == target){
return left;
}
else if (nums[left] < target){
return left + 1;
}
else{
return left - 1;
}
}
}
else{
if (target == nums[mid])return mid;
if (target == nums[right])return right;
if (right == (mid + 1)) return mid + 1;
//右半区域
if ( mid<right){
left=mid;
mid = (left + right) / 2;
}
else{
if (nums[right] == target){
return right;
}
else if (nums[right] > target){
return right - 1;
}
else{
return right + 1;
}
}
}
}
return 0;
}
int main()
{
vector<int> vec = { 1,3,5,6 };
int target = 2;
int res = searchInsert(vec, target);
cout <<res<< endl;
system("pause");
return 0;
}