题目一:数组中数字都两两相同,只有一个不同,找出该数字:
题目二:数组中数字两两相同,有两个不同,找出这两个:
int findUnique(int* a, int len)
{
int i = 1;
int temp = a[0];
for(; i < len; i++)
{
temp = temp ^ a[i];
}
printf("%d ", temp);
} 题目二:数组中数字两两相同,有两个不同,找出这两个:
#include <stdlib.h>
int a[] = {1,1,2,4,3,3,2,5};
int findXorSum(int* a, int len)
{
int i = 0;
int temp = 0;
for(; i < len; i++)
{
temp = temp ^ a[i];
}
return temp;
}
int findFirstBit1(int n)
{
int count = 1;
while(!( n & 1))
{
n = n>>1;
count++;
}
return count;
}
int isBit1(int a, int count)
{
a = a >> count-1;
return (a & 1);
}
void findTwoUnique(int* a, int len)
{
int i = 0;
int m = 0, n = 0;
int temp = findXorSum(a, len);
int count = findFirstBit1(temp);
for(; i < len; i++)
{
if(isBit1(a[i],count))
{
m = m ^ a[i];
}
else
{
n = n ^ a[i];
}
}
printf("%d, %d", m, n);
}
int main()
{
findTwoUnique(a,8);
}
本文介绍两种算法:一种用于从数组中找到唯一不同的元素,利用位运算中的异或操作;另一种用于找到数组中仅有的两个不重复的元素,通过计算异或总和并分离出唯一设置的比特位来实现。
724

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



