题目描述
输入数组长度 n
输入数组 a[1…n]
输入查找个数m
输入查找数字b[1…m]
输出 YES or NO 查找有则YES 否则NO 。
输入
输入有多组数据。
每组输入n,然后输入n个整数,再输入m,然后再输入m个整数(1<=m<=n<=100)。
输出
如果在n个数组中输出YES否则输出NO。
样例输入
6
3 2 5 4 7 8
2
3 6
样例输出
YES
NO
思路:用二分查找
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
int binaryFind(int a[], int n, int x) {
int start = 0, end = n - 1, mid;
while (start <= end) {
mid = (start + end) / 2;
if (a[mid] == x) return mid;
else if (a[mid] < x) start = mid + 1;
else end = mid - 1;
}
return -1;
}
int main() {
const int MaxN = 200;
int N, arr[MaxN], n, res, m;
while (cin >> N) {
for (int i = 0;i < N;i++) cin >> arr[i];
sort(arr, arr + N);
cin >> m;
while (m--) {
cin >> n;
if (res = binaryFind(arr, N, n) == -1) {
cout << "NO" << endl;
}
else cout << "YES"<<endl;
}
}
}