1.头文件<algorithm>
unique去重区间左闭右开(和sort)一样
返回最后一个不重复元素的下标
时间复杂度为O(n),加上sort就为O(nlogn)
具体用法
int a[10]={0,1,3,3,4,5,8,8,9,0};
int n=unique(a,a+10)-a;
for(int i=0;i<n;i++){
cout<<a[i]<<" ";
}
n是:最后一个不重复数字的下标。
不过一般在进行去重时先排序
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int i;
int a[10]={0,1,3,3,4,5,8,8,9,0};
sort(a,a+10);//按从小到大的顺序
int n=unique(a,a+10)-a;
for(int i=0;i<n;i++){
cout<<a[i]<<" ";
}
}
也可手写去重
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int i = 0, j = 0;
const int len = 10; // 数组的长度
int p[len] = { 0, 7, 7, 6, 1, 1, 5, 5, 8, 9 };
int t[len] = {0}; // 储存去重后的数组
int counter = 1; // 记录t数组中存了多少元素
sort(p, p + len); // 排序
t[0] = p[0];
// 去重
while (i < len) {
if (p[i] != p[++j]) {
i = j;
t[counter++] = p[i]; // 不重复的存入t数组,然后counter加一
}
}
// 输出
for (i = 0; i < (counter-1); i++) // counter-1就是t数组中存的元素个数
cout << t[i] << " "; // 0 1 5 6 7 8 9
return 0;
}
意思是:从数组中下标为0的元素
开始向后比较,遇到重复元素忽略,遇到不同元素,就把这个不同元素存入 t 数组,同时再从刚才那个不同元素下标处开始继续向后比较
,以此类推。
这行代码:t[0] = p[0];
无论数组中下标为0的元素
和后面的元素
重不重复都要加,这是因为while循环
将比较元素
后面的不同元素
存入 t 数组,所以下标为0的元素
永远不会被存入,直接手动加上就行了。