题目描述
输入数组长度 n
输入数组 a[1…n]
输入查找个数m
输入查找数字b[1…m]
输出 YES or NO 查找有则YES 否则NO
如(括号内容为注释)
输入:
5(数组长度)
1 5 2 4 3(数组)
3(查找个数)
2 5 6(查找具体数字)
输出:
YES
YES
NO
分析:本题采用对于模板的数据先进行排序,采用折半查找的方法查找答案
本题参考的折半查找、折半插入的相关博客
https://blog.csdn.net/Gunanhuai/article/details/88934984(查找)
https://blog.csdn.net/guoweimelon/article/details/50904206(插入,此处插入的位置就是left 的位置)
bool t_find(int x, vector<int> nums)
{
int low = 0, hight = nums.size() - 1;
int mid;
while (low<=hight)
{
mid = (low + hight) / 2;
if (nums[mid] == x)
return true;
else if (nums[mid] > x)
hight = mid - 1;
else
low = mid + 1;
}
return false;
}
void t_Search()
{
vector<int> model;
int m;
cin >> m;
int t;
for (int i = 0; i < m; i++)
{
cin >> t;
model.push_back(t);
}
sort(model.begin(), model.end());
vector<int> nums;
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> t;
nums.push_back(t);
}
bool flag;
for (int i = 0; i < n; i++)
{
if (nums[i] >= model[0] && nums[i] <= model[model.size() - 1])
{
flag = t_find(nums[i], model);
if (flag == true)
{
cout << "YES" << endl;
}
else
cout << "NO" << endl;
}
else
{
cout << "NO" << endl;
}
}
}