问题描述
使用折半查找法实现给定一个有序(非降序)数组A,可含有重复元素,求最大的i使得A[i]小于target,不存在则返回 -1
输入形式
第一行:非降序数组A
第二行:target
输出形式
位置 i 或者 -1
样例输入
2 4 6 7 8 8 9
9
样例输出
5
样例说明
输出的是数组下标对应的值,不是第几个元素
代码
#include <iostream>
#include<string>
#include<vector>
using namespace std;
int Binsearch() {
int target;
vector<int> a;
while (cin >> target) {
a.push_back(target);
if (cin.get() == '\n')
break;
}
cin >> target;
int high = a.size() - 1;
int low = 0;
while (low < high) {
int mid = (low + high + 1) / 2;
if (a[mid] < target)
low = mid;
else
high = mid - 1;
}
return a[low] < target ? low : -1;
}
int main()
{
cout << Binsearch();
}