题解——明明的随机数(数组去重和排序)

#include <iostream>

#include <cstdio>

using namespace std;

int n;

int a[105];

int b[105];

int read()

{

    scanf("%d",&n);

    for(int i=0;i<n;i++)//不能开一个变量大小的数组,但可以用for循环来控制使用多少空间

    {

        int x;

        scanf("%d",&x)

        a[i]=x;

    }

}

void fun()

{

    sort(a,a+n);

    int sum=0;

    for(int i=0;i<n-1;i++)//去重

    {

        if(a[i]!=a[i+1])

        {

            b[sum]=a[i];

            sum++;  //计数

        }

    }

    if(a[n-2]!=a[n-1])

    {

        b[sum]=a[n-1];

        cout<<sum+1<<endl;

        for(int i=0;i<sum+1;i++)

            printf("%d ",b[i]);

    }

    else

    {

        cout<<sum<<endl;

        for(int i=0;i<sum;i++)

            printf("%d ",b[i]);

    }

   

}

int main()

{

    read();

    fun();

    return 0;

}

另外一种算法是:再开一个新的数组b,每次从a数组中往b数组中拿元素时,都检查一遍b数组中是不是已经有了这个元素,如果已经有了,那么就不放进去了。但是这样的算法的复杂度为O(n^2),明显没有上述算法时间复杂度低。

这篇文章,是又一个故事的结束...
lazy's story is continuing.
原文地址:https://www.cnblogs.com/Hello-world-hello-lazy/p/13500752.html