c++ - 单次出现的数字

标签 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;
}

最佳答案

这是一种在实际代码中没有用处的愚蠢技巧。在这种情况下,该算法(明确地)仅在所有元素出现 3 次时才有效,但出现一次的元素除外。如果任何对象出现偶数次,它将失败。在您的输入中,6 出现了两次,因此失败。

关于c++ - 单次出现的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25202188/

相关文章:

c++ - 在哪里可以找到用于训练 opencv 人脸识别系统的完整 img 包?

c++ - 使用 lambda 的简单 RAII 包装器的复制初始化在 GCC 和 Clang 下意外失败

在运行时加载的 C++ 动态链接库 - Poco/qmake

c - 为什么我的 SelectionSort 并不总是有效?

c++ - 为 ReadFile 提供有效回调的方法

algorithm - 如果对于每个节点,都给出了父指针,则查找树的直径

algorithm - 优化图形邻接的矢量化代码

linux - 计算出现次数分组依据

Javascript - 正则表达式 : How to replace id in string with the same id plus number?

iphone - 如何查找 NSString 中某种格式的出现