pair<int,int> find_appear_once(const int data[],int size) {
int xor_two = 0;
int i;
for (i=0;i<size;++i) {
xor_two ^= data[i];
}
///*
int flag = 0x01;
while ((flag & xor_two) == 0)
flag <<= 1;
//*/
//int flag = xor_two & -(unsigned int)xor_two;
int xor_a = 0;
for(i=0;i<size;++i) {
if(data[i] & flag)
xor_a ^= data[i];
}
return pair<int,int>(xor_a,(xor_a^xor_two));
}
int main()
{
int array[]={1,1,2,2,-3,4,4,5,5,6,6,7,7,8,8,9,9,-13};
pair<int,int> res = find_appear_once(array,sizeof(array)/sizeof(array[0]));
cout<<res.first<<"\t"<<res.second<<endl;
return 0;
}
int xor_two = 0;
int i;
for (i=0;i<size;++i) {
xor_two ^= data[i];
}
///*
int flag = 0x01;
while ((flag & xor_two) == 0)
flag <<= 1;
//*/
//int flag = xor_two & -(unsigned int)xor_two;
int xor_a = 0;
for(i=0;i<size;++i) {
if(data[i] & flag)
xor_a ^= data[i];
}
return pair<int,int>(xor_a,(xor_a^xor_two));
}
int main()
{
int array[]={1,1,2,2,-3,4,4,5,5,6,6,7,7,8,8,9,9,-13};
pair<int,int> res = find_appear_once(array,sizeof(array)/sizeof(array[0]));
cout<<res.first<<"\t"<<res.second<<endl;
return 0;
}
本文介绍了一个C++函数,该函数能够从整数数组中找出只出现一次的两个元素,并返回这两个元素。通过使用位操作和异或运算实现了高效的查找算法。

9万+

被折叠的 条评论
为什么被折叠?



