找数组中只出现一次的元素(暴力求解)
#include<stdio.h>
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 4, 3, 2, 1,5,7 };
//请找出只出现一次的元素
int sz = sizeof(arr) / sizeof(arr[0]);//计算元素个数
int i = 0;
for (i = 0; i < sz; i++)
{ //统计arr[i]在元素中出现了几次
int count = 0;//计数器
int j = 0;
for (j = 0; j < sz; j++)
{
if (arr[i] == arr[j])
count++;
}
if (count == 1)
{ printf("%d\n", arr[i]);
break;
}
}
return 0;
}
****优化求解
(使用异或'^'是按二进制进行异或(相同为0,相异为1))
#include<stdio.h>
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 4, 3, 2, 1 ,5,7};
int sz = sizeof(arr) / sizeof(arr[0]);
int i = 0;
//ret就是数组中只出现一次的元素
//0^3=3 ; 3^3=0; 0^1^2^3^2^1=3
// '^',异或,是按二进制进行异或(相同为0,相异为1)
int ret = 0;
for (i = 0; i < sz; i++)
{
ret = ret^arr[i];
}
printf("ret=%d\n", ret);
return 0;
}