要求:一个数组中只有两个数字是出现一次, 其他所有数字都出现了两次。
找出这两个数字,编程实现。
//void find_num(int arr[], int len)
//{
// int i = 0;//循环变量
// int ret = 0;//记录所有值异或的结果
// int pos = 0;//记录ret二进制为第一个为1的位置
// int x = 0;//将一组值异或在x,得到1个没有相同数字的值
// int y = 0;//将另一组值异或在x,得到另1个没有相同数字的值
// for (i = 0; i < len; i++)
// {
// ret ^= arr[i];
// }//将数组的所有值异或
// for (i = 0; i < 32; i++)
// {
// if (1 == ((ret >> i) & 1))
// {
// pos = i;
// break;
// }
// }//找到ret二进制为第一个为1的位置
// for (i = 0; i < len; i++)
// {
// if (1 == ((arr[i] >> pos) & 1))
// {
// x ^= arr[i];
// }
// else
// y ^= arr[i];
// }//分组异或
// printf("x=%d,y=%d\n", x, y);
//
//}
//int main()
//{
// int arr[] = { 1, 1, 2, 2,4 , 3, 5, 5 };
// int sz = sizeof(arr) / sizeof(arr[0]);
// find_num(arr, sz);
// system("pause");
// return 0;
//}
本文介绍了一种通过异或操作高效查找数组中仅出现一次的两个数字的方法。具体步骤包括:1. 将数组所有元素进行异或得到初始结果;2. 找到初始结果中第一个1的位置;3. 根据该位置再次分组异或,得到最终的两个单例数。此方法适用于数据结构与算法领域,特别是处理大量重复数据时快速筛选出唯一元素。

被折叠的 条评论
为什么被折叠?



