40.数组中只出现一次的数字

原创 2015年07月10日 20:03:33



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];
}
}
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);
}




【剑指Offer学习】【面试题40:数组中只出现一次的数字】

题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次,请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。我们想到异或运算的一个性质:任何一个数字异或它自己都等...

【剑指offer-Java版】40数组中只出现一次的数字

数组中只出现一次的数字:输入一个数组,该数组中有两个数字只出现了一次,其他数字都出现了两次,求出这两个只出现了一次的数字 要求时间复杂度为O(n)空间复杂度为O(1) 考虑一个数组中只有一个数字...

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

/*思路:从头到尾依次异或数组中的每一个数字,最终得到的结果就是两个只出现一次的数字异或的结果。因为其它数字都 只出现了两次,在异或中全部抵消了。由于两个数字肯定不一样,那么异或的结果肯定不为0,也...
  • hxysea
  • hxysea
  • 2013年10月19日 11:14
  • 456

剑指Offer——(40)数组中只出现一次的数字

一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。...

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

一. 题目 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字.要求时间复杂度是O(n),空间复杂度是O(1).代码请到我的代码库中下载 Point2Offe...

[剑指Offer]40.数组中只出现一次的数字

一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。思路我们直到异或的性质:任何一个数字异或他自己都等于0. 所以说我们如果从头到尾依次异或每一个数字,那么最终...

【面试题】剑指Offer-40-数组中只出现一次的数字

题目概述 解题思路 我们知道,一个数和自己异或的结果是0 如果这个整形数组中只有一个数字出现一次的话,全部异或后的结果就是出现一次的数字 由于这道题目是两个数字a,b出现了一次,我们也...

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

题目:数组中只出现一次的数字           一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度为O(n),空间复杂度为O(l).例如,输...

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

/* 数组中只出现一次的数字: 一个整型数组里除了两个数字之外,其他的数字都出现了两个,请写程序找出这两个只出现一次的数字。要求时间 复杂度是O(n),空间复杂度是O(1) 分析: 直接遍历,统计次数...

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

题目: 一个整形数组里除了两个数字意外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 要求时间复杂度是On,空间复杂度为O1 这个是上一篇 2016阿里巴巴java笔试题 的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:40.数组中只出现一次的数字
举报原因:
原因补充:

(最多只允许输入30个字)