您的位置:首页 > 职场人生

[剑指offer][面试题40]数组中只出现一次的数字

2013-10-21 22:52 661 查看
一个整型数组中除了两个数字之外,其他的数字都出现了两次,写出程序找出这两个只出现了一次的数字,时间复杂度要求O(n),空间复杂度要求O(1).

#include <iostream>
using namespace std;

bool findNumsAppearOnce(int *piData, int iLen, int & iNum0, int & iNum1)
{
if (iLen<2){
return false;
}

int iXOR = 0;
for (int i=0; i<iLen; i++){
iXOR ^= piData[i];
}

int iFlag = 1;
while ( !(iXOR & iFlag) && (iFlag<0x8FFFFFFF) ){
iFlag <<= 1;
}

iNum0 = 0;
iNum1 = 0;
for (int i=0; i<iLen; i++){
if (piData[i] & iFlag){
iNum0 ^= piData[i];
}
else{
iNum1 ^= piData[i];
}
}

return true;
}

int main()
{
int data[8] = {2,4,3,6,3,2,5,5};
int a, b;

bool bFound = findNumsAppearOnce(data, 8, a, b);
if (bFound){
cout<<a<<" "<<b<<endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: