数组去重的几种做法
1. STL做法
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
vector<int>a;
while(n--){
int t;
cin>>t;
a.push_back(t);
}
sort(a.begin(),a.end());
a.erase(unique(a.begin(),a.end()),a.end());
for(int i=0;i<a.size();i++){
cout<<a[i]<<' ';
}
cout<<endl;
return 0;
}
该种做法是通过erase函数加上unique函数直接去重,具体核心在此函数上
2.尺取法(快慢指针(双指针))做法
此种做法来源罗勇军老师的新作《算法竞赛》一书的尺取法
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
vector<int>a;
while(n--){
int t;
cin>>t;
a.push_back(t);
}
sort(a.begin(),a.end());
int i,j;
for(i=0,j=0;i<a.size();i++){
if(a[i]!=a[j])a[++j]=a[i];
}
for(i=0;i<=j;i++){
cout<<a[i]<<' ';
}
cout<<endl;
return 0;
}
需要注意的地方是:需要先进行排序,然后在进行相应的去重操作。
3. Hash表去重
此种做法占用空间较大(遇到数据值较大的稀疏数据时易占用大量的空间)所以这里先不加描述
这里埋个坑,有空回来填,有其他做法的话也会在之后补上的。
如果阅读过程当中发现有问题,请及时私信我,方便改正与更好的学习,谢谢。