STL版
写法一:利用STL的set容器自动去重并排序的特征
#include<iostream>
#include<set>
using namespace std;
int main()
{
int m;
set<int> res;
cin>>m;
while(m--)
{
int x;
cin>>x;
res.insert(x);
}
cout<<res.size()<<endl;
for(int x:res) cout<<x<<' ';
return 0;
}
写法二:利用STL的方法
#include<iostream>
#include<algorithm>
using namespace std;
const int N=110;
int a[N];
int main()
{
int m;
cin>>m;
for(int i=0;i<m;i++) cin>>a[i];
sort(a,a+m);
int ed=unique(a,a+m)-a;
cout<<ed<<endl;
for(int i=0;i<ed;i++) cout<<a[i]<<' ';
return 0;
}
手动实现版
#include<iostream>
using namespace std;
const int N=110;
int a[N];
void quick_sort(int * a,int l,int r)//快速排序
{
if(l>=r) return;
int x=a[l+r>>1],l1=l-1,r1=r+1;
while(l1<r1)
{
do l1++;while(a[l1]<x);
do r1--;while(a[r1]>x);
if(l1<r1) swap(a[l1],a[r1]);
}
quick_sort(a,l,r1),quick_sort(a,r1+1,r);
}
int unique(int * a,int n)//去重的思想是,先排序后利用双指针算法
{
quick_sort(a,0,n-1);
int l=0;
for(int r=0;r<n;r++)
if(r==0 || a[r]!=a[r-1]) a[l++]=a[r];
return l;
}
int main()
{
int m;
cin>>m;
for(int i=0;i<m;i++) cin>>a[i];
m=unique(a,m);
cout<<m<<endl;
for(int i=0;i<m;i++) cout<<a[i]<<' ';
return 0;
}
$\color{blue}{如果有什么问题,可以在评论下方指出,欢迎点赞关注}$
👍