桶排序,在洛谷上学来的 我感觉桶排序和哈希差不多吧
#include <cstdio>
#include <cstdlib>
const int maxn = 1005;
int bucket[maxn]={0};
int main(){
int n,x;
scanf("%d",&n);
int num = 0;
for(int k=1;k<=n;k++){
scanf("%d",&x);
if(bucket[x]) continue;
bucket[x] = 1;
num++;
}
printf("%d\n",num);
int tag = 0;
for(int i=1;i<=maxn;i++){
if(bucket[i]){
printf(tag==0?"%d":" %d",i);
tag = 1;
}
}
return 0;
}
也可以直接用set集合,而且它是自动去重合排序的,刚好物尽其用,直接输出st.size()。
#include <cstdio>
#include<set>
using namespace std;
int main(){
int n,x;
set<int> st;
scanf("%d",&n);
for(int k=1;k<=n;k++){
scanf("%d",&x);
st.insert(x);
}
printf("%d\n",st.size());
set<int>::iterator it;
int tag = 0;
for(it = st.begin();it!=st.end();it++){
printf(tag==0?"%d":" %d",*it);
tag =1;
}
}