NC16669-明明的随机数
题目链接:https://ac.nowcoder.com/acm/problem/16669
标签:set unique vector sort
题意:给定n个数,将n个数去重并排序后输出
思路1:
使用set来达到去重和排序效果 复杂度O(nlogn)
#include<iostream>
#include<set>
#include<algorithm>
using namespace std;
set<int> vi;
int main (){
    int n,num;
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>num;
        vi.insert(num);
    }
    cout<<vi.size()<<endl;
    for(int s:vi){
        cout<<s<<" ";
    }
    return 0;
}
思路2:
使用unique函数达到去重,然后sort
也可以使用erase删掉vector中冗余的元素
unique原理:若相邻的元素相同则留下一个,其他的后移到最后,返回去重后的容器结尾的迭代器,原容器大小不变。
所以: 应该先排序后再使用unique;如果重复的元素不连续的话,unique对其没有影响
例如
vecotr<int> v(10);
...
...
...
int t=(int)(unique(v.begin(),v.end())-v.begn());
or
int t = unique(v,v+n)-v;
如下:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> vi;
int main (){
    int n;
    cin>>n;
    int num;
    for(int i=0;i<n;i++){
    cin>>num;
    vi.push_back(num);
}
    sort(vi.begin(),vi.end());
   int t =(int)(unique(vi.begin(),vi.end())-vi.begin());
   cout<<t<<endl;
   for(int i=0;i<t;i++){
       cout<<vi[i]<<" ";
   }
    return 0;
}

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号