解决重复元素问题
#include <bits/stdc++.h>
#define ios ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr)
using namespace std;
int n;
int main()
{
ios;
vector<int> a;
cin >> n;
a.resize(n);
for (int i = 0; i < n; i ++ )
{
cin >> a[i];
}
sort(a.begin(),a.end());
a.erase(unique(a.begin(),a.end()),a.end());
n = a.size();
for (int i = 0; i < n; i ++ )
{
cout << a[i] << ' ';
}
return 0;
}
unique(a.begin(),a.end())
是把重复元素都移到最右边并返回出重复元素之外的最后一个元素的下一个下标
a.erase(unique(a.begin(),a.end()),a.end());
是删除不重复最后一个元素下标到n
是重复元素,删除就行了
如数组a
为1 2 2 3 3
,他的长度为5
,将来进行unique(a.begin(),a.end())
数组会变成1 2 3 2 3
并返回4,也就是不重复元素3
的下一个下标,再从下标4~n
进行删数,把2和3删除
但注意vector下标从0开始