这里的算法是在两个数组中查找公共元素。一切正常,直到我输入
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);
}
答案 0 :(得分:0)
索引0
是函数seqSearch
可能返回的有效索引。
改为使用-1
(也在if (seqSearch(key, sizekey, a[i]) == 0)
中使用)。
答案 1 :(得分:0)
使用std :: unordered_set代替将键用作“ int数组”。因此,您也不需要单独的count变量,并且它不会在此处接受重复的变量。
答案 2 :(得分:0)
在seqSerach中以bool形式返回值,这意味着值是否已存在于数组中。相应地在第二个函数中使用它。问题是0是您要返回的有效整数。