【发布时间】:2014-08-08 11:12:33
【问题描述】:
对于这个问题,“给定一个数组,其中每个元素出现 3 次,除了一个元素只出现一次。找到出现一次的元素。”
我尝试了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;
}
【问题讨论】:
-
C 还是 C++?解决方案可能因语言而异。例如,在 C++ 中,I 将使用
std::unordered_multiset. -
数一下 6s。一个还是三个?
-
您输入的数据无效,因此即使代码正确,您也不会得到有意义的结果。
-
@JoachimPileborg 无序集的复杂性在最坏的情况下是二次的。由于这是一个人为的不切实际的问题,它应该处理人为的不切实际的输入。
-
根据
using和cout它是 C++,但所提出的算法与语言无关。也许你应该澄清你是否需要这个,或者 C++ only 解决方案是否可以接受。
标签: c++ algorithm find-occurrences