同样的,如果题目要求M个欲查询的数中每个数在N个数中出现的次数,那么可以把hashTable数组替换为int型,然后在输入N个数时进行预处理,即当输入的数为x时,就令hashTable[x]++,这样就可以用O(N+M)的时间复杂度输出每个欲查询的数出现的次数。
#include <cstdio>
#include <iostream>
using namespace std;
const int MAXN = 100010;
int hashTable[MAXN ] = {0};
int main()
{
int n, m;//N和M中数字的个数
int x;
cin >> n;
cin >> m;
for(int i = 0; i < n; i++)
{
cin >> x;
hashTable[x]++;
}
for(int i = 0; i < m; i++)
{
cin >> x;
cout << hashTable[x] << endl;
}
return 0;
}