如何编写一个函数,该函数将返回没有匹配对的数组元素的值?

时间:2018-08-20 14:23:17

标签: arrays match

我想寻求有关该函数的帮助,该函数必须返回没有匹配对的数组元素的值。

例如

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

2 个答案:

答案 0 :(得分:0)

此代码中的许多问题:

您将每个数字与以下所有数字进行比较。因此,在a)中,您将第一个1与所有其他数字进行比较,并计算两个1,但随后又对第二个1进行计数,而找不到另一个,因此代码返回1。

此外,您在if tab[i] == tab[j])之后缺少大括号,并且只有第一个while(j<length)为true时,您才进入if(tab[i] == tab[j]循环。

一种可能的解决方案是从数组中删除已经计数的数字,因此您无需再次对其进行计数,或者对数组进行排序并计数直到每次递增。如果您只使用较小的数字,那么您也可以遍历每个可能的数字并计算它出现的频率,尽管这样做不太优雅。

答案 1 :(得分:0)

假设数组中的所有元素都是整数,并且除了一对之外都具有匹配对,只需对元素进行XOR运算直到最后一个。扫描结束时的结果将是不匹配的元素。

之所以可行,是因为:

  • 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;

然后根据需要处理边缘情况。