等值数目

描述

已知两个整数数组f[]和g[],它们的元素都已经从小到大排列。例如f[]中可能有1,2,2,3,3,g[]中有1,2,2,2,3。 
请写一个程序,算出这两个数组彼此之间有多少组相同的数据。就以上例而言: 
f[0]于g[0]是第一组; 
f[1]于g[1]是第二组; 
f[2]于g[2]是第三组; 
f[3]于g[4]是第四组。

输入

第一行为两个整数m, n(1≤m, n≤1000),分别代表数组f[], g[]的长度。 
第二行有m个元素,为数组f[]。 
第三行有n个元素,为数组g[]。

输出

输出等值数目。

样例输入

5 5
1 2 2 2 3
1 2 2 3 3

样例输出

4

WA了几次了,刚开始用map去标记,之后就是用数组标记,最后感觉不能用什么去标记,因为是超时的问题啊,所以直接处理数据。
代码如下:
 
#include<stdio.h>
#include<string.h>

int main()
{
    int n,m,i,j,k,f[1010],g[1010];

    while(scanf("%d%d",&n,&m)!=EOF)
    {
        for(i=0; i<n; i++)
            scanf("%d",&f[i]);
        for(i=0; i<m; i++)
            scanf("%d",&g[i]);
        i = j = k = 0;
        while(i<n && j<m)
        {
            if(f[i]==g[j])
            {
                k++;
                i++;
                j++;
            }
            else
            {
                if(f[i]<g[j])
                    i++;
                else
                    j++;
            }
        }
        printf("%d\n",k);
    }
    return 0;
}
posted @ 2017-09-12 22:48  让你一生残梦  阅读(322)  评论(0编辑  收藏  举报