读书人

【一个面试题】从数组中找到满足条件的

发布时间: 2013-09-18 14:17:40 作者: rapoo

【一个面试题】从数组中找到满足条件的数字
一个整数数组,里面的整数元素,满足以下的条件:
里面只有两个整数只出现过一次,其他的整数都是成对出现的。找到这两个整数。

例如
[1, 1, 2, 2, 3, 3, 4, 5], 4和5就是我们要找的。

要求时间复杂度o(n)。
[解决办法]
扫描两次就行了呀……
http://blog.csdn.net/cxllyg/article/details/7636226
[解决办法]
http://blog.csdn.net/hackbuteer1/article/details/6889217

这里介绍的比较好

[解决办法]


bool IsBit1(int num, unsigned int indexBit)
{
num = num >> indexBit;

return (num & 1);
}

unsigned int FindFirstBit(int num)
{
int index = 0;
while (((num & 1) == 0) && (index < 32))
{
num = num >> 1;
++index;
}

return index;
}


void Find(int data[], int length, int &num1, int &num2)
{
if (length < 2)
return;

int resultOR = 0;
for (int i = 0; i < length; ++ i)
resultOR ^= data[i];

unsigned int indexOf1 = FindFirstBit(resultOR);

num1 = num2 = 0;
for (int j = 0; j < length; ++ j)
{


if(IsBit1(data[j], indexOf1))
num1 ^= data[j];
else
num2 ^= data[j];
}
}

读书人网 >C++

热点推荐