一维数组中所有数字均应重复两遍,但有一个只出现了一次,找出这个数据

一维数组中所有数字均应重复两遍,但有一个只出现了一次,找出这个数据


#include <stdio.h>
#include <stdlib.h>

int FindValueCounts(int arr[], int size, int value);

int main(void)
{
    int brr[11] = {1, 2, 3, 3, 1, 4, 5, 4, 5, 9, 9};
    for(int a = 0; a < sizeof(brr); a ++) 
    {
        if(FindValueCounts(brr, sizeof(brr), brr[a]) == 1) 
        {
            printf("value = %d\n", brr[a]);
            return 0;
        }
    }
    return 0;
}

int FindValueCounts(int arr[], int size, int value)
{
    int counts = 0;
    for(int a = 0; a < size; a ++)
    {
        if(arr[a] == value)
            counts ++;
        if(counts == 2)
            break;
    }
    return counts;
}

不考虑时间限制的话,就是双循环遍历搜索

供参考:

#include <stdio.h>
int main()
{
    int arr[11] = { 1, 2, 3, 3, 1, 4, 5, 4, 5, 9, 9 }, n = 0, i;
    for (i = 0; i < 11; i++)
        n ^= arr[i];
    printf("%d", n);
    return 0;
}

两种思路,授人以鱼不如授人以渔,不贴代码了

  1. 从第一个数字开始逐个做对比。用两个for可以实现
  2. 两个相同的数异或结果为0
不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^