题目描述
给定一个单调递增的整数序列,问某个整数是否在序列中。
输入
第一行为一个整数n(n不超过10000),表示序列中整数的个数;
第二行为n个整数;
第三行为一个整数m(m不超过50000),表示查询的个数;
接下来m行每行一个整数k。
输出
每个查询的输出占一行,如果k在序列中,输出Yes,否则输出No。
样例输入
5 1 3 4 7 11 3 3 6 9
样例输出
Yes No No
代码实现
#include <iostream>
using namespace std;
/*
* 实现二分查找
* x 想要查找的元素
* arr 查找元素的数组
* n 数组中元素的个数
*/
void binary_search(int x, int arr[], int n) {
int left = 0;
int right = n - 1;
int middle = 0;
while (left <= right)
{
middle = (left + right) / 2;
if (arr[middle] > x) {
right = middle - 1;
}
else if(arr[middle] < x) {
left = middle + 1;
}
else {
cout << "Yes" << endl;
return;
}
}
cout << "No" << endl;
return;
}
int main()
{
int n1; // 输入数组的元素个数;
cin >> n1;
int* arr = new int[n1];
for (int i = 0; i < n1; i++) {
cin >> arr[i];
}
int n2 = 0; // 输入要查找元素的个数
cin >> n2;
for (int i = 0; i < n2; i++) {
int x = 0;
cin >> x;
binary_search(x,arr,n1);
}
delete [] arr;
return 0;
}