数组中的唯一元素,其中所有元素出现k次,C ++中除外
我们有一个数组A。A的所有元素都出现m次,但是一个元素只出现一次。我们必须找到那个独特的元素。
因此,如果输入像A=[6,2,7,2,2,6,6],m=3,那么输出将是7。
为了解决这个问题,我们将遵循以下步骤-
INT_SIZE:=8*整数类型变量的大小
定义一个大小为INT_SIZE的数组。并填充0
对于初始化i:=0,当i<INT_SIZE时,更新(将i增加1),执行-
res:=res+(((count[i]modm)*2^i)
如果(arr[j]AND2^i)不等于0,则-
res:=0
count[i]:=count[i]+1
对于初始化j:=0,当j<size时,更新(将j增加1),执行-
对于初始化i:=0,当i<INT_SIZE时,更新(将i增加1),执行-
返回资源
让我们看下面的实现以更好地理解-
范例(C++)
#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