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

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

2016-07-26 22:21 741 查看
#include "iostream"
using namespace std;
unsigned int FindFirstBitIs1(int num)
{
int indexBit = 0;
while (((num & 1) == 0) && (indexBit < 8 * sizeof(int)))
{
num = num >> 1;
++indexBit;
}
return indexBit;
}
bool IsBit1(int num, unsigned int indexBit)
{
num = num >> indexBit;
return (num & 1);
}
void FindNumsAppearOnce(int data[], int length, int* num1, int *num2)
{
if (data == NULL || length < 2)
return;
int resultExclusiveOR = 0;
for (int i = 0; i < length; i++)
resultExclusiveOR ^= data[i];
unsigned int indexOf1 = FindFirstBitIs1(resultExclusiveOR);
*num1 = *num2 = 0;
for (int j = 0; j < length;++j)
{
if (IsBit1(data[j],indexOf1))
*num1 ^= data[j];
else
*num2 ^= data[j];
}
}
int main()
{
int a[] = { 2, 4, 3, 6, 3,2,5,5 };
int num1 ,num2;
FindNumsAppearOnce(a, 8, &num1, &num2);
cout << num1 << "  " << num2 << endl;
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息