重点在于排序,但是我们可以利用c++中自带的sort排序,它就是基于快排的。
我的算法思路是先把数据读入vector中,然后利用sort排序将容器内元素进行排序。之后再去掉相同的元素就可以了,重复的元素即为当前元素和前一个元素相同,则这个元素就是重复元素,我们利用a.erase函数去掉这个元素就可以了。
在这里,我们还需要明确指针的相关知识,否则可能会出现问题。在a.erase之后,虽然容器的size变小了,但是指针p却没有变化,所以我们必须再让指针回溯一下。
#include <bits/stdc++.h>
using namespace std;

bool cmp(int x,int y)
{     return x<y; }

int main()
{     int n;     scanf("%d",&n);     vector<int> a;     vector<int>::iterator p;     int temp;     for(int i=0;i<n;i++)     {         scanf("%d",&temp);         a.push_back(temp);         }     sort(a.begin(),a.end(),cmp);     p=a.begin();     //cout<<*(p-1)<<endl;     while(p!=a.end())     {         if(*p==*(p-1))         {             a.erase(p);             p=p-1;         }         ++p;     }     for(int i=0;i<a.size();i++)     {         cout<<a[i]<<endl;     }     return 0;          }