二分查找解决
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
int n;
cin>>n;
vector<int> a(n);
for(int i = 0;i < n;i++){
cin>>a[i];
}
//二分前需要排序
sort(a.begin(),a.end());
int m;
cin>>m;
int b;
while(m--){
cin>>b;
int left = 0;//左边界
int right = n - 1;//右边界
while(left <= right){//left==right进行最后一次判断
int mid = (left + right) / 2;//中间值
if(a[mid] == b){
cout<<"YES"<<endl;
break;
}else if(b < a[mid]){
right = mid - 1;
}else{
left = mid + 1;
}
}
if(left > right){
cout<<"NO"<<endl;
}
}
return 0;
}
转化为map查找
#include<iostream>
#include<algorithm>
#include<vector>
#include<map>
using namespace std;
int main(){
int n;
cin>>n;
vector<int> a(n);
//用map保存数组a : map<a[i],i> 键是a[i],值是下标
map<int,int> m1;
for(int i = 0;i < n;i++){
cin>>a[i];
m1.insert({a[i],i});
}
int m;
cin>>m;
int b;
while(m--){
cin>>b;
if(m1.find(b) != m1.end()) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}