重点在于排序,但是我们可以利用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; }