#include <iostream>
using namespace std;
unsigned findThePositionOfFirstBitIs1(int num)
{
unsigned pos = 0;
while (!(num & 0x1))
{
num = num >> 1;
pos++;
}
return pos;
}
bool isBit1(int num, unsigned pos)
{
return static_cast<bool>((0x1 << pos) & num);
}
void findNumsAppearOnce(int num[], int length)
{
if (num == nullptr || length <= 0)
{
return;
}
int resultExclusiveOr = 0;
for (int i = 0; i < length; i++)
{
resultExclusiveOr ^= num[i];
}
unsigned pos = findThePositionOfFirstBitIs1(resultExclusiveOr);
int one, two;
one = two = 0;
for (int i = 0; i < length; i++)
{
if (isBit1(num[i], pos))
{
one ^= num[i];
}
else
{
two ^= num[i];
}
}
cout << "one: " << one << endl
<< "two: " << two << endl;
}
int main()
{
int num[] = { 2, 4, 3, 6, 3, 2, 5, 5 };
findNumsAppearOnce(num, sizeof(num) / sizeof(int));
return 0;
}
剑指Offer --> Question 40
最新推荐文章于 2022-05-03 15:39:55 发布