0
#include<iostream.h>
#include<fstream.h>
ifstream f("Bac.txt");
using namespace std;
int main()
{
    int n,m,i,j,ok,nr=0;
    long v[100],p[100];
    f>>m;
    f>>n;
    for(i=1;i<=m;i++)
        f>>p[i];
    for(i=1;i<=n;i++)
        f>>v[i];
    for(i=1;i<=n;i++)
    {
        ok=0;
        for(j=1;j<=m;j++)
        {
            if(v[i]==p[j])
                ok=1;
        }
        if(ok==0)
            nr++;
    }
    cout<<nr;

}

“Bac.txt”文件包含:

6 7

1 2 3 4 7 20

3 5 7 8 9 20 24

我制作的这个程序比较从文件中读取的 2 个数组的值,并显示与第一个数组相比时第二个数组唯一的值的数量。

我使用的方法在某种程度上是有效的“按时间执行”吗?如果我不将文件第 2 行和第 3 行的数字序列存储到数组中,是否会更有效,或者甚至可以让程序做同样的事情?(或者从存储内存的角度来看,这只会使其更高效,但在执行时间上也不会?)

4

1 回答 1

0

您的算法目前是O(N 2 ),这不是特别好。

如果两个序列已排序,您可以通过简单地合并两个数组在O(N)时间内完成此操作。

如果两个序列没有排序,你可以在O(N.logN)时间内使用std::set.

于 2013-06-06T01:57:54.303 回答