概述
一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。找出这两个数字,编程实现。 本题思路:
1.将0与数组每个元素依次亦或的结果就是两个只出现一次的元素亦或的值,相同元素的二进制位是相同的,亦或的值为0
2.将数组分为两组,每一组包含一个只出现一次的数,分组的思路是:两个唯一的数是不相同的,那么在他们的二进制序列中必然有一位是不相同的,找出这一位,以这一位为标志,将其余数进行分组。
3.将两个数组分别亦或,最终得到两个只出现一次的数。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
void find_num(int arr[], int size)
{
assert(arr);
assert(size > 2);
int i = 0;
int res = arr[0];
int flag = 0;
int a = 0;
int b = 0;
for (i = 1; i < size; i++)
{
res ^= arr[i];
}
//找不同的bit位
for (i = 0; i < 32; i++)
{
if ((res & 1) == 1)
{
break;
}
res >>= 1;
flag++;
}
//按比特位不同将arr分组,同时,整体给两个数组异或,得到两个数
for (i = 0; i < size; i++)
{
if (((arr[i] >> flag) & 1) == 1)
a ^= arr[i];
else
b ^= arr[i];
}
printf("%d %dn", a, b);
}
int main()
{
int arr[] = { 1, 11, 2, 2, 3, 1,3, 4,23, 4, 6, 6 };
int size = sizeof(arr) / sizeof(arr[0]);
find_num(arr, size);
system("pause");
return 0;
}
最后
以上就是玩命大神为你收集整理的数组中只有两个数是单独出现的,其余数都成对出现,找出这两个数的全部内容,希望文章能够帮你解决数组中只有两个数是单独出现的,其余数都成对出现,找出这两个数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复