问题描述:
给出N个整数,在输入M个整数,判断M个数中是否在N中出现过.
举个例子:N = {8, 3,7,2 6}, M = 3 , { 7 , 4, 2}
思路1:遍历N个整数,和M个整数,判断是否相等.时间复杂度为O(MN)
思路2:时间换空间,定义一个bool型的hashTabel,在输入N个整数的时候,hashTabel[x] = true;
时间复杂度为O(M+N)
#include <iostream>
using namespace std;
const int maxn = 100000;
bool hastTable[maxn] = {false};
int main() {
int n, m, x;
cin>>n>>m;
for (int i = 0; i < n; i++) {
cin>>x;
hastTable[x] = true;
}
for (int i = 0; i < m; i++) {
cin>>x;
if (hastTable[x] == true) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}
查询M个整数出现的次数
#include <iostream>
using namespace std;
const int maxn = 100000;
int hastTable[maxn] = {0};
int main() {
int n, m, x;
cin>>n>>m;
for (int i = 0; i < n; i++) {
cin>>x;
hastTable[x]++;
}
for (int i = 0; i < m; i++) {
cin>>x;
cout<<hastTable[x]<<endl;
}
return 0;
}