1547. 奇数统计(count)
题目描述
给出N个正整数,其中只有一个数出现了奇数次,其余的数都出现偶数次。
求那个出现了奇数次的数。1<=N<=500000,N肯定是奇数。所有出现数都不超过10000。
输入
第一行是N,下一行有N个正整数。
输出
出现了奇数次的数。
样例输入
【样例输入1】
9
3 1 2 2 17 1 3 17 3
【样例输入2】
5
12 13 14 13 12
样例输出
【样例输出1】
3
【样例输出2】
14
方法一(桶排):
#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
#include<queue>
#define fre(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout);
using namespace std;
const int MAX=2147483647;
const int N=1e6;
int f[5000100],n,a;
int main()
{
fre(count);
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a),f[a]++;
for(int i=1;i<=5000000;i++)
if(f[i]%2)
{printf("%d",i);return 0;}
return 0;
}
方法二(异或):
相同的数进行异或后为零。
#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
#include<queue>
#define fre(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout);
using namespace std;
const int MAX=2147483647;
const int N=1e6;
int n,a,b;
int main()
{
//fre(count);
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a),b^=a;
printf("%d",b);
return 0;
}