散列是常用的算法之一,简单来说在A中出现的元素是否在B中出现过。
比如:给出N个整数,再给M个数,问M个数中的每个数分别是否在N个数中出现过。因为遍历起来时间复杂度太大,所以不妨空间换时间,设定一个bool数组hashTable[100010],hashTable[x]=true表示x在N个正整数中出现过,hashTable[x]=false表示x在N个正整数中没有出现过,一开始读入的时候就令hashTable[x]=true,对于要查询的数就可以通过hashTable数组判断出每个数是否出现过。
以上就是散列的基本思路
#include<cstdio>
const int maxn=100010;
bool hashTable[maxn]={false};
int main(void)
{
int n,m,x;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
{
scanf("%d",&x);
hashTable[x]=true;
}
for(i=0;i<m;i++)
{
scanf("%d",&x);
if(hashTable[x]==true)
{
printf("YES\n");
}
else
printf("NO\n");
}
return 0;
}