查找频率与C ++中其他数组元素不同的元素

假设我们有一个由N个数字组成的数组,其中每个元素除一个元素外出现相同的次数(m次,也给出了相同的次数),我们必须找到这个元素。

因此,如果输入像A = [6,2,7,2,2,6,6,6],m = 3,那么输出将是7。

为了解决这个问题,我们将遵循以下步骤-

  • INT_SIZE:= 8 *整数类型变量的大小

  • 定义大小为INT_SIZE的数组计数。并填充0

  • 对于初始化i:= 0,当i <INT_SIZE时,更新(将i增加1),请执行以下操作:

    • res:= res +(((count [i] mod m)* 2 ^ i)

    • 如果(arr [j] AND 2 ^ i)不等于0,则-

    • res:= 0

    • count [i]:= count [i] + 1

    • 对于初始化j:= 0,当j <size时,更新(将j增加1),执行-

    • 对于初始化i:= 0,当i <INT_SIZE时,更新(将i增加1),执行-

    • 返回资源

    例 

    让我们看下面的实现以更好地理解-

    #include <bits/stdc++.h>
    using namespace std;
    int selectUnique(unsigned int arr[], int size, int m){
       int INT_SIZE = 8 * sizeof(unsigned int);
       int count[INT_SIZE];
       memset(count, 0, sizeof(count));
       for(int i = 0; i < INT_SIZE; i++)
          for(int j = 0; j < size; j++)
             if((arr[j] & (1 << i)) != 0)
                count[i] += 1;
       unsigned res = 0;
       for(int i = 0; i < INT_SIZE; i++)
          res += (count[i] % m) * (1 << i);
       return res;
    }
    main(){
       unsigned int arr[] = { 6, 2, 5, 2, 2, 6, 6 };
       int size = sizeof(arr) / sizeof(arr[0]);
       int m = 3;
       cout << selectUnique(arr, size, m);
    }

    输入值

    { 6, 2, 5, 2, 2, 6, 6 }

    输出结果

    5