2010-06-30 229 views
4

我有两个阵列2层的元件的每个阵列具有例如一些值:比较C两个阵列++

int a[] = {1, 2, 3, 4}; 
int b[] = {0, 1, 5, 6}; 

现在我需要的阵列(A)中的元素与阵列元件相比较(b)中.. 如果有什么匹配的程序应该返回一个错误或打印“错误有重复的值”等。 在上述情况下,它应该返回一个错误coz a [0] = b [1],因为两者具有相同的值。

我该怎么做?

+0

它们会被排序吗? – 2010-06-30 17:35:32

+0

数组是否已知被排序? – 2010-06-30 17:35:43

回答

7

如果阵列是这个小,我只想做一个蛮力方法,并遍历两个数组:

for (int i=0;i<4;++i) 
{ 
    for (int j=0;j<4;++j) 
    { 
     if (a[i] == b[j]) 
     { 
      // Return an error, or print "error there is a duplicate value" etc 
     } 
    } 
} 

如果你将要处理大阵,你可能要考虑一个更好的算法,但是,因为这是O(n^2)。

例如,如果您的某个数组已排序,您可以更快速地检查匹配项,特别是在数组长度变大时。但是,如果你的数组总是总是少数几个元素的话,我不会为更精细的东西而烦恼。

+0

+1表示这是一个二次复杂算法,不适合大数据集。 – stinky472 2010-06-30 17:38:34

+0

谢谢我刚添加标志和循环后 如果别的意见 并做:) 谢谢 – SolidSnake 2010-06-30 17:47:11

3

假设两个数组进行排序,可以一步到位,虽然他们他们是这样的:

// int array1[FIRSTSIZE]; 
// int array2[SECONDSIZE]; 
for(int i=0, j=0; i < FIRSTSIZE && j < SECONDSIZE;){ 
    if(array1[i] == array2[j]){ 
     cout << "DUPLICATE AT POSITION " << i << "," << j << endl; 
     i++; 
     j++; 
    } 
    else if(array1[i] < array2[j]){ 
     i++; 
    } 
    else{ 
     j++; 
    } 
} 

这应该有线性复杂,但如果他们整理它才会起作用。

2

排序数组的解决方案已经发布。如果未对数组进行排序,则可以从每个数组中构建一个集(例如std::set或散列集),并查看这些集是否不相交。您可能必须将值对索引对存储在集合中才能找出哪个索引重复(并适当地重载比较运算符)。这可能会给O(n log n)的复杂性。

+0

我喜欢这个答案。我应该注意到:散列集合在TR1中实现。 std :: tr1 :: unordered_set和boost :: unordered_set。 TR1在GCC和Visual Studio中均实现,因此std :: tr1 :: unordered_set应该是“足够标准”的。假设一切都与unordered_set一起工作,你应该能够在O(n)中做到这一点。 – Dragontamer5788 2010-06-30 21:49:56

0
//v={1,2,3,4}; vector 
//v1={1,2,3,4} vector 

    bool f=0; 
    if(equal(v.begin(),v.end(),v1.begin())) //compare two vector, if equal return true 
    { 
     f=1; 
    } 

    } 
    if(f==1) 
     cout<<"Yes"<<endl; 
    else cout<<"No"<<endl; 

     enter code here