目录
vector去重
去重步骤如下:
- 对数组排序 (数据存在 vector<int>a 中)
- 用STL封装好的函数 unique() 和 erase(); 其中unique()是把不重复的数都放到vector的前面,其他的都扔到后面去,并返回后面的第一个重复数的迭代器(如下图第箭头所指的地方),而erase()是把一个区间内的数都删掉
sort(a.begin(), a.end());
a.erase(unique(a.begin(), a.end()), a.end());
//经上述两个步骤后的a就是一个无重复值的有序vector
普通数组去重
为什么STL那么方便,还要考虑用普通数组呢?
因为我踩到坑了,做 https://atcoder.jp/contests/abc213/tasks/abc213_c 这道题的时候,我是用的vector去重,结果TLE。然后换成数组,就AC,服了
普通的数组只是没有erase函数,只是把重复的值放到了末尾,并没有删除
//先排序
sort(X, X + n);
//再求出去重后的大小,以后就访问[0, size - 1]就行
int size = unique(X, X + n) - X;