- 具体描述:
在一个整型数组中,数组都是成对出现,只有两个元素为单独的元素,求出这两个元素的值。 - 思路:
1、此处为异或预算符的经典问题,两个相同值的异或运算后的值为0;
2、首先将数组的所有元素做异或运算,最后得到的是两个单独元素异或后的值 (因为相同元素异或后的值均变成0);
3、两个单独元素肯定会有某一位或者几位是不同的,找出要么为0,要么为1,我们可以根据此位为0或者1,将数组元素分为两个部分,两个部分中,分别各有一个单独的元素,再做一会运算,则找到了这两个值。 - 代码描述
#include <iostream>
void FindNumsAppearOnce(int (&a)[6])
{
int value = 0;
int num1,num2;
int flag = 1;
for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++)
{
value ^= a[i];
}
num1 = num2 = value;
while ((value & flag) == 0)
{
flag <<= 1;
}
for (int j = 0; j < sizeof(a) / sizeof(a[0]); j++)
{
if ((flag & a[j]) == 0)
{
num1 ^= a[j];
}
else {
num2 ^= a[j];
}
}
std::cout << "不重复的数组元素分别为:" << "\n" << "num1 = " <<num1 << " num2 = "<< num2;
}
int main(void)
{
int a[6] = { 2,4,5,2,5,6 };
FindNumsAppearOnce(a);
getchar();
return 0;
}
- 后记
该问题在做算法题目是看到,在此处做记录,以备日后查看学习。