对于这个问题,“给定一个数组,其中每个元素出现三次,除了一个元素只出现一次。找到出现一次的元素。”
我尝试了 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;
}
最佳答案
这是一种在实际代码中没有用处的愚蠢技巧。在这种情况下,该算法(明确地)仅在所有元素出现 3 次时才有效,但出现一次的元素除外。如果任何对象出现偶数次,它将失败。在您的输入中,6 出现了两次,因此失败。
关于c++ - 单次出现的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25202188/