我的思路是首先用哈希去重,把有重复的和没有重复的分成两个数组储存,然后接在一起,再排序
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
//freopen("ming.in","r",stdin);
//freopen("ming.out","w",stdout);
int n,m,j=1;
int a[100+10],b[1000+10],c[1000+10],d[1000+10];
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
for(int i=1;i<=n;i++)
b[a[i]]++;
for(int i=1;i<=n;i++)
{
if(b[a[i]]==1)
{
d[j]=a[i];
j++;
}
}
for(int i=1;i<=n;i++)
{
if(b[a[i]]>1&&c[a[i]]==0)
{
d[j]=a[i];
c[a[i]]=1;
j++;
}
}
sort(d,d+j);
printf("%d\n",j-1);
for(int i=1;i<j;i++)
printf("%d ",d[i]);
return 0;
}
今天又做了一次此题,觉得我以前用的方法怎么这么麻烦...........
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
int n,a[110],h[1010];
int main()
{
freopen("random.in","r",stdin);
freopen("random.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=n;i++) h[a[i]]++;
int m[110];
int l=1;
for(int i=1;i<=1000;i++)
{
if(h[i])
{
m[l++]=i;
}
}
l--;
printf("%d\n",l);
sort(m+1,m+l+1);
for(int i=1;i<=l;i++) printf("%d ",m[i]);
return 0;
}