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
给定已排序的数组,试图找到值为target的索引,如果没有找到,则返回它能够插入的位置,使得插入后数组仍为升序。
思路:二分法递归查找,取中间值,比较大小然后递归。若找到返回下标值,若没有比较大小返回应插入的下标值。
C++程序
#include <iostream>
using namespace std;
int Search(int a[], int f, int l,int n);
int MakeSure(int a[], int f, int l, int n);
int main()
{
int arr[] = { 1,3,5,6 };
int res = Search(arr, 0, 3, 6);
cout << res << endl;
system("pause");
return 0;
}
int Search(int a[], int f, int l,int n)
{
int m;
if (l <= f + 1)
{
return MakeSure(a, f, l, n);
}
else
{
m = int((f + l) / 2);
if (a[m] == n)
return m;
else if (a[m] > n)
return Search(a, f, m, n);
else
return Search(a, m, l, n);
}
}
int MakeSure(int a[], int f, int l, int n)
{
if ((a[f] == n) || (n < a[f]))
return f;
else if ((a[l] == n) || (n < a[l]))
return l;
else
return l + 1;
}