我想寻求有关该函数的帮助,该函数必须返回没有匹配对的数组元素的值。
例如
a)在数组[1、1、2、3、4、3、4]中,不成对的元素为2。
b)在数组[1、1、2、4、3、4、2、3、4]中,不成对的元素为4。
到目前为止,我想出了下面的代码。因此,基本上,它会检查重复的数字,从而适用于b)情况;但是它不适用于a)情况。欢迎提供任何有关如何修复此代码的帮助,以使其适用于a)和b)情况。
int
答案 0 :(得分:0)
此代码中的许多问题:
您将每个数字与以下所有数字进行比较。因此,在a)中,您将第一个1与所有其他数字进行比较,并计算两个1,但随后又对第二个1进行计数,而找不到另一个,因此代码返回1。
此外,您在if tab[i] == tab[j])
之后缺少大括号,并且只有第一个while(j<length)
为true时,您才进入if(tab[i] == tab[j]
循环。
一种可能的解决方案是从数组中删除已经计数的数字,因此您无需再次对其进行计数,或者对数组进行排序并计数直到每次递增。如果您只使用较小的数字,那么您也可以遍历每个可能的数字并计算它出现的频率,尽管这样做不太优雅。
答案 1 :(得分:0)
假设数组中的所有元素都是整数,并且除了一对之外都具有匹配对,只需对元素进行XOR运算直到最后一个。扫描结束时的结果将是不匹配的元素。
之所以可行,是因为:
a XOR b = b XOR a
)a XOR a = 0
0 XOR a = a
每个元素都会被它们的匹配对抵消,除了一个:您要寻找的那个。
示例:
int result=0;
for (i = 0; i < length; i++) {
result = result ^ tab[i];
}
return result;
然后根据需要处理边缘情况。