算法
(排序,去重) $O(nlogn)$
考察了两个函数的使用:
- sort:可以将序列排序。
- unique:可以将序列中所有相邻的重复元素删除(只保留一个)。此处的删除,并不是真的删除,而是指重复元素的位置被不重复的元素覆盖了。最后会返回不重复序列的后一个位置。
时间复杂度
sort需要 $O(nlogn)$ 的时间,unique需要 $O(n)$ 的时间,因此总时间复杂度是 $O(nlogn)$。
C++ 代码
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 110;
int n;
int q[N];
int main()
{
scanf("%d", &n);
for (int i = 0; i < n; i ++ ) scanf("%d", &q[i]);
sort(q, q + n);
int k = unique(q, q + n) - q;
printf("%d\n", k);
for (int i = 0; i < k; i ++ ) printf("%d ", q[i]);
return 0;
}
这不就是给set准备的题吗(狗头
这就是离散化模板叭
直接set好像也可以
unique大法好(大雾
对滴hh
老师,unique(q, q + n) - q后面的-q是什么意思?谢谢!
两个指针相减,会返回两个指针之间的元素个数。假设一共有
k
个不同元素,那么unique
函数会返回q[k]
的指针,因此减去q
这个指针之后,就会得到k
了。