单次出现一个数字

GBS*_*BSE 0 c++ algorithm find-occurrences

对于这个问题,"给定一个数组,其中每个元素出现三次,除了一个只出现一次的元素.找到一次出现的元素."

我尝试了http://www.geeksforgeeks.org/find-the-element-that-appears-once/上给出的代码.但是,当输入为3,3,1,3,6,1,6,7,1时,我得到1的错误答案.

请帮我找到我正在做的错误.

#include<iostream>

using namespace std;

int getSingleOccurrence(int nArray[9], int n){
int ones = 0, twos=0;
int common_bit_mask=0;

for(int i=0;i<n;i++){
    twos|= ones & nArray[i];
    ones^=nArray[i];
    common_bit_mask = ~(ones & twos);
    ones&=common_bit_mask;
    twos&=common_bit_mask;
}
return ones;
}


int main(){
   int nArray[]={3,3,1,3,6,1,6,7,1};
   cout<<getSingleOccurrence(nArray,9);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

Jam*_*nze 6

这是一种在实际代码中没有用的愚蠢技巧.在这种情况下,算法(显式)仅在所有元素存在3次时有效,除了存在一次的一个.如果任何对象存在偶数次,则会失败.在您的输入中,6出现两次,因此失败.