一个数组中只有俩个数出现了一次,其他都是成对出现的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个数组中只有俩个数出现了一次,其他都是成对出现的相关的知识,希望对你有一定的参考价值。

#include <stdio.h>
#include<stdlib.h>


int find_one_bit(int num)    //约定寻找二进制中的某一位为1的位
{
int bit = 0;
while (num)
{
if (num & 1 == 1)
return bit;
bit++;
num = num >> 1;
}
return -1;
}


void find_num(int arr[], int size, int *p1, int *p2)
{
int tmp = 0;
int i = 0;
int pos = 0;
for (i = 0; i < size; i++)
{
tmp ^= arr[i];    //tmp保存的最终结果为不同的两个数字异或的结果
}
pos = find_one_bit(tmp);
for (i = 0; i < size; i++)
{
if (1 & (arr[i] >> pos))  //约定二进制位中同一位置是否为1,用以分组数字,因为某一位为1时,由异或的结果可知必定一个数字该位为0,另一个为1。0(0==*p1)与任何数字异或仍为该数本身。 
*p1 ^= arr[i];
else
*p2 ^= arr[i];
}
}

//主函数
int main()
{
int arr[] = {1,2,3,4,5,1,2,6,3,4};
int size = sizeof(arr) / sizeof(arr[0]);
int num1 = 0;
int num2 = 0;
find_num(arr, size, &num1, &num2);  //num1,num2必须传进地址,否则只是修改了形参而并不影响主函数的值,num1,num2仍为初始化的0。
printf("%d %d\n", num1, num2);
system("pause");
return 0;
}


以上是关于一个数组中只有俩个数出现了一次,其他都是成对出现的的主要内容,如果未能解决你的问题,请参考以下文章

求一个数组中只有一个和两个数字出现了一次,其余成对出现

找出数组中不是成对出现的数字

数组中只出现一次的数字

数组中只出现一次的数

C语言实现一个int类型数组里除了两个数字之外,其他的数字都出现了两次,找出这两个数字

p6 只出现一次的数字 (leetcode136)