4 搜索插入位置
作者: Turbo时间限制: 1S章节: 课程设计
问题描述 :
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
示例 1:
输入:
4
1 3 5 6
5
输出: 2
示例 2:
输入:
4
1 3 5 6
2
输出: 1
输入说明 :
输入三行:
第一行输入一个整数n表示数组nums的长度。
第二行输入n个整数表示数组nums的元素。
第三行输入一个整数表示需要查找的目标值target.
提示:
1 <= n <= 10^4
-10^4 <= nums[i] <= 10^4
nums 为 无重复元素 的 升序 排列数组
-10^4 <= target <= 10^4
输出说明 :
输出一个整数表示结果。
输入范例 :
4
1 3 5 6
7
输出范例 :
4
#include<iostream>
using namespace std;
void search(int arr[],int target,int length)
{
int left = 0;
int right = length - 1;
if (arr[length - 1] < target)
{
cout << length;
length++;
return;
}
else if (arr[0] > target)
{
cout << 0;
length++;
return;
}
while (left <= right)
{
int mid = left + (right - left) / 2;
if (arr[mid] == target)
{
cout<<mid;
return;
}
else if (arr[mid] < target)
{
left = mid + 1;
}
else if (arr[mid] > target)
{
right = mid - 1;
}
cout<< left;
return;
}
}
int main()
{
int arr[100000];
int length = 0;
cin >> length;
for (int i = 0; i < length; i++)
{
cin >> arr[i];
}
int target = 0;
cin >> target;
search(arr, target, length);
return 0;
}