Duplicate Elements

题目描述

给你n  个数,祛除其中的重复的数,并保持第一次出现的数原有的相对顺序。比如{3,2,2,3,1}  ,那么祛除重复元素以后为{3,2,1}  。

 

     

输入

第一行是一个整数K  ,K  表示样例的个数,不超过100。
每个样例的第一行是一个整数n(1≤n≤10000。)  表示数的个数;第二行是n  个正整数,其值不超过10 9   。

输出

每行输出一个样例的结果,每个整数之间用一个空格隔开。

 

 

##ac代码

#include<stdio.h>
#include<stdlib.h>
typedef struct In
{
int sz;
int wz;
}In;
In a[11000]={0},b[11000]={0};
int cmp( const void *a , const void *b )
{
struct In *c = (In *)a;
struct In *d = (In *)b;
if(c->sz != d->sz) return c->sz - d->sz;
else return c->wz - d->wz;
}
int cmp1( const void *a , const void *b )
{
struct In *c = (In *)a;
struct In *d = (In *)b;
if(c->wz != d->wz) return c->wz - d->wz;
else return c->sz - d->sz;
}
int main()
{
    int k;
    scanf("%d",&k);
    getchar();
    while(k--)
    {
        int n;
        scanf("%d",&n);
        getchar();
        for(int i=0;i<n;i++)
        {
            scanf("%d",&a[i].sz);
            getchar();
            a[i].wz=i;
        }
        int m=0;
        qsort(a,n,sizeof(a[0]),cmp);

        b[m++]=a[0];
        for(int i=1;i<n;i++)
        {
            if(a[i].sz!=a[i-1].sz) b[m++]=a[i];
        }

        qsort(b,m,sizeof(b[0]),cmp1);
        for(int i=0;i<m;i++)
        {
            if(i==m-1)
            {
                printf("%d",b[i].sz);
                break;
            }
            printf("%d ",b[i].sz);
        }
        printf("\n");
    }
    return 0;
}