一个整型数组中有一个元素只出现一次,其它元素都出现两次。求出只出现一次的元素。
要求:
线性时间复杂度,不能使用额外空间。
聪明的你能搞定吗?
格式:
第一行输入数字n,代表有n个数,根据题意,很明显n是奇数,
第二行输入数组A[i], i从0~n-1.
最后输出单独的数字。
样例输入
7 1 3 2 0 3 2 1
样例输出
0
#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
int a[n];
for(int i=0;i<n;i++){
scanf("%d", &a[i]);
}
sort(a,a+n);
for(int i=0;i<n;i++){
if(i==n-1){
printf("%d",a[i]);
}
else{
if(a[i]==a[i+1]){
i++;
}
else{
printf("%d",a[i]);
break;
}
}
}
return 0;
}
思路:由于题目要求不使用额外的空间,只好先将输入的数组排序,在从前向后遍历,比较这个数字与下个数字是否相同,若相同,则向后2个数字,若不同,则找到了。这里注意要处理最后一个数字的情况。
总结:注意看题目要求!之前先用hash处理了,结果测试能过,提交就过不了了。