2010-06-30 282 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