在两个数组中查找共同的元素

时间:2019-12-01 07:10:01

标签: c++ c arrays

这里的算法是在两个数组中查找公共元素。一切正常,直到我输入

a[]={4,3,4,2}
b[]={4,1}

输出应为

key[]={4}

相反,它给出:

key[]={4,4}

我该如何解决?

int seqSearch(int arr[], int size, int key) {
    for (int i = 0; i < size; i++)
        if (arr[i] == key)
            return i;
    return 0;
}
void findDup(int a[], int b[], int& size1, int& size2, int key[], int& sizekey)
{
    for (int i = 0; i < size1; i++)
        for (int j = 0; j < size2; j++)
            if (a[i] == b[j])
                if (seqSearch(key, sizekey, a[i]) == 0)
                {
                    key[sizekey] = a[i];
                    sizekey++;
                }   
}
int main() {
    int a[max], b[max], key[100], size1, size2, sizekey=0;
    findDup(a, b, size1, size2, key, sizekey);
}

3 个答案:

答案 0 :(得分:0)

索引0是函数seqSearch可能返回的有效索引。

改为使用-1(也在if (seqSearch(key, sizekey, a[i]) == 0)中使用)。

答案 1 :(得分:0)

使用std :: unordered_set代替将键用作“ int数组”。因此,您也不需要单独的count变量,并且它不会在此处接受重复的变量。

答案 2 :(得分:0)

在seqSerach中以bool形式返回值,这意味着值是否已存在于数组中。相应地在第二个函数中使用它。问题是0是您要返回的有效整数。