还是hash开了太大,用set存,相同就擦,不同就插入
方法一
//用set省时间
#include<stdio.h>
#include<set>
using namespace std;
int main(){
int zu;
freopen("in.txt","r",stdin);
while(scanf("%d",&zu)!=EOF && zu!=0){
set<int> st;
for(int i=0;i<zu;i++){
int x;
scanf("%d",&x);
set<int>::iterator it=st.find(x);
if(it==st.end() ){
st.insert(x);
}else{
st.erase(it);
}
}
set<int>::iterator it=st.begin();
printf("%d\n",*it);
}
}
方法二:
异位或:①相同的数字或为0.10(2)^10(2)=0②0与其他数字或为该数字0^11=11(3)
例如res=1^2^3^2^1=(有交换律)1^1^2^2^3=0^0^3=3
#include<stdio.h>
int main(){
int zu;
while(scanf("%d",&zu)!=EOF && zu!=0){
int res=0;
for(int i=0;i<zu;i++){
int x;
scanf("%d",&x);
res^=x;
}
printf("%d\n",res);
}
return 0;
}
本文介绍两种高效解决数组中重复元素问题的方法:一种利用Set数据结构实现,通过查找与插入操作来筛选出唯一元素;另一种采用异或运算特性,巧妙地将所有数字进行异或操作得到唯一值。
251

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



