排序去重板子题题解

· · 题解

思路

本题考查知识点为排序或 STL 常用函数。

题意为给输入的数列排序并去重,输出之后的数列。本题解重点介绍 STL 函数 sort 和 unique。

给一个整数数列,我们可以使用 sort 函数对它排序,sort 函数的调用方式为 sort(begin_place,end_place);,其中 begin_placeend_place 表示排序数组的开头位置和结尾位置。注意:此处的结尾位置为最后一个元素的位置的后一个位置,也即数列后的第一个空位置。STL 系列函数的“结束位置”都是这么定义的。

对于一个有序的数组,我们可以使用 unique 函数对它去重。unique 函数的调用方式为 unique(begin_place,end_place),如果数组里有 k 个不同的值,那么调用后数组的前 k 个位置将会是这些不同的值有序排列,重复的值会被移动到数组后面。

现在有个问题:我们怎么知道 k 是多少呢?不用担心,unique 函数是有返回值的!它的返回值是指向这 k 个数的下一个位置的指针,所以用这个指针减去 begin_place 得出来的数字就是 k 了。

至此我们已经学会了使用这两个函数,只要对输入的数列进行简单运用就可以通过此题。

(完)

代码

#include<bits/stdc++.h>
using namespace std;
int n,a[200];
int main(){
    cin >> n;
    for(int i = 1;i <= n;i ++) cin >> a[i];
    sort(a + 1,a + n + 1);//排序
    n = unique(a + 1,a + n + 1) - (a + 1);//去重,并把去重后的元素个数记为 n
    printf("%d\n",n);//输出去重后的元素个数
    for(int i = 1;i <= n;i ++) printf("%d ",a[i]);//输出去重后的元素
    printf("\n");
  return 0;
}