二分查找NOJ
给定一个单调递增的整数序列,问某个整数是否在序列中。
输入:
第一行为一个整数n,表示序列中整数的个数;第二行为n(n不超过10000)个整数;第三行为一个整数m(m不超过50000),表示查询的个数;接下来m行每行一个整数k。
输出:
每个查询的输出占一行,如果k在序列中,输出Yes,否则输出No。
输入样例:
5
1 3 4 7 11
3
3
6
9
输出样例:
Yes
No
No
注意连续return的妙处
#include<iostream>
using namespace std;
int n;
int a[10000];
bool Binsearch(int left,int right,int target)
{
int mid;
if (left <= right) {
mid = (left + right) / 2;
if (a[mid] == target) {
return true;
}
else {
if (a[mid] < target) {
return Binsearch(mid + 1, right, target);
}
else {
return Binsearch(left, mid - 1, target);
}
}
}
return false;
}
int main()
{
int m,k;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
cin >> m;
for (int i = 0; i < m; i++) {
cin >> k;
if (Binsearch(0, n - 1, k)) {
cout << "Yes" << endl;
}
else
cout << "No" << endl;
}
return 0;
}