intersection set
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
1
-
描述
-
两个集合,你只需要求出两个集合的相同元素,并输出个数。
-
输入
-
m n
{a1 , a2 , a3 , a4 ... ai ... am}
{b1 , b2 , b3 , b4 ... bi ... bn}
1 <= n , m <= 50000 , 保证一个集合中不会输入重复数据
0 <= ai , bi <= 100000
多组测试数据
输出
- 一行一个数据,为两个集合中相同的元素个数 样例输入
-
8 8 1 5 6 9 10 12 16 59 5 6 9 8 15 17 65 98
样例输出
-
3
-
代码实现:
-
#include<stdio.h>
#define N 100001
int a[100001];
int main()
{
int m,n,k,p=1,s,i;
while(scanf("%d%d",&m,&n)!=EOF)
{
for(i=0;i<m;i++)
{
scanf("%d",&k);
a[k]=p;
}
for(i=0,s=0;i<n;i++)
{
scanf("%d",&k);
if(a[k]==p)
s++;
}
p++;
printf("%d\n",s);
}
return 0;
}
小结:在本题中,常规思路是用两层for循环来逐个比较实现,但是会超时。
-
在借鉴了别人的思路后发现,这个思路特别好,而且题目中也说明了每个数字只出现一次,为建立一个标记数组打下基础,通过比较对应位置有无标记来比对是否有值相等,这个想法真的很赞,大大节约了求解时间。
-
m n