普通方法 :
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
int a[maxn];
int b[maxn];
int main()
{
int n;
while(cin>>n){
for(int i=0;i<n;i++){
cin>>a[i];
}
sort(a,a+n);
b[0]=a[0];
int k=0;
for(int i=1;i<n;i++){
if(a[i]!=a[i-1]){
b[++k]=a[i];
}
}
for(int i=0;i<=k;i++){
cout<<b[i]<<" ";
}
puts("");
}
return 0;
}
使用unique:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
int a[maxn];
int main()
{
int n;
while(cin>>n){
for(int i=0;i<n;i++){
cin>>a[i];
}
sort(a,a+n);
int ans=unique(a,a+n)-a;//unique为C++自带的去重函数,ans为去重后的数组的下标上限
for(int i=0;i<ans;i++){
cout<<a[i]<<" ";
}
puts("");
}
return 0;
}
unique()是C++标准库函数里面的函数,其功能是去除相邻的重复元素(只保留一个),所以使用前需要对数组进行排序.
对于长度为n数组a,unique(a,a+n) - a返回的是去重后的数组长度
那它是怎么实现去重的呢?删除?
不是,它并没有将重复的元素删除,而是把重复的元素放到数组的最后面藏起来了
当把原长度的数组整个输出来就会发现:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
int a[maxn];
int main()
{
int n;
while(cin>>n){
for(int i=0;i<n;i++){
cin>>a[i];
}
sort(a,a+n);
int k=unique(a,a+n)-a;
for(int i=0;i<n;i++){
cout<<a[i]<<" ";
}
puts("");
}
return 0;
}
上述代码就是去重后再把原数组输出,测试一下看看结果就懂了