从一个数组合并两个int数组而不重复

我试图将两个数组合并为一个没有重复但我的代码无法正常工作。 任何人都可以建议如何解决这个问题?

void unify(int set_A[], int size_A, int set_B[], int size_B, int set_C[], int size_C) { int i,j,count=0,indx=size_A; for(i=0;i<size_A;i++) { set_C[i]=set_A[i]; } for(i=0;i<size_B;i++) { for(j=0;j<size_A;j++) { if (set_B[i]!=set_C[j]) count++; } if (count==size_A){ set_C[indx]=set_B[i]; indx++; } } } 

例:

 a{3 7 13 8 11 1 4} b{5 7 1 2 3} a_b{3 7 13 8 11 1 4 5 0 0 0 0 0..} 

可能会被优化,或至少做得漂亮:

 void unify(int set_A[], int size_A, int set_B[], int size_B, int set_C[], int size_C) { int indexC, indexTemp; for(indexC = 0; indexC < size_A; indexC++) set_C[indexC] = set_A[indexC]; for(int indexB = 0; indexB < size_B; indexB++) { for(indexTemp = 0; indexTemp < indexC; indexTemp++) { if(set_B[indexB] == set_C[indexTemp]) break; } if(indexTemp == indexC) set_C[indexC++] = set_B[indexB]; } } 

像这样的东西:

 void unify(int set_A[], int size_A, int set_B[], int size_B, int set_C[], int size_C) { int counterC = 0; for (int i = 0; i < size_A && counterC < size_C; i++) { int discard = 0; for (int j = 0; j < i; j++) { if (set_A[j] == set_A[i]) { discard = 1; break; } } if (discard) continue; set_C[counterC++] = set_A[i]; } for (int i = 0; i < size_B && counterC < size_C; i++) { int discard = 0; for (int j = 0; j < i; j++) { if (set_B[j] == set_B[i]) { discard = 1; break; } } if (discard) continue; for (int j = 0; j < counterC; j++) { if (set_C[j] == set_B[i]) { discard = 1; break; } } if (discard) continue; set_C[counterC++] = set_B[i]; } } 

我不得不为你的代码添加一些小的修正以使其工作(未经测试)。 注意评论。

 void unify(int set_A[], int size_A, int set_B[], int size_B, int set_C[]) { int i, j, indx = size_A; // Add the value from A to C for(i = 0; i < size_A; i++) { set_C[i] = set_A[i]; } // Iterate the values of B for(i = 0; i < size_B; i++) { int count = 0; // Find if A contains B[i] for(j = 0; j < size_A; j++) { if (set_A[j] != set_B[i]) ++count; } // If A doesn't contain B[i], add B[i] to C and increase indx if (count == size_A) { set_C[indx] = set_B[i]; ++indx; } } } 

虽然我会用函数替换第一个嵌套循环,告诉我数组是否包含某些值,如下所示:

 int contains(int arr[], int size, int val) { int i; for(i = 0; i < size; i++) { if (arr[i] == val) return 0; } return 1; }