一个数组中,只有两个数单独出现,其他数都是成对出现的,找出这两个数。
#include<stdio.h>
int find_one_bit(int num)
{
int i=0;
while(num)
{
if(num%2==1)
{
return i;
}
else
{
i++;
}
num/=2;
}
}
void find_two_num(int arr[],int len)
{
int i=0;
int ret=0;
int pos=0;
int num1=0;
int num2=0;
for(i=0;i<len;i++)
{
ret^=arr[i];
}
pos=find_one_bit(ret);
for(i=0;i<len;i++)
{
if(((arr[i]>>pos) & 1)==1)
{
num1^=arr[i];
}
else
{
num2^=arr[i];
}
}
printf("num1=%d,num2=%d",num1,num2);
}
int main()
{
int arr[]={1,2,3,4,4,3,2,1,5,6};
int len=sizeof(arr)/sizeof(arr[0]);
find_two_num(arr,len);
printf("\n");
return 0;
}
#include<stdio.h>
int main()
{
int arr[]={1,2,3,4,4,3,5,1,5,6};
int i=0;
int j=0;
int len=sizeof(arr)/sizeof(arr[0]);
for(i=0;i<len;i++)
{
int count=0;
for(j=0;j<len;j++)
{
if(arr[i]==arr[j])
{
count++;
}
}
if(count==1)
{
printf("%d\n",arr[i]);
}
}
return 0;
}
转载于:https://blog.51cto.com/fengbaoli/1694375