去重+排序板子(set+map)

题意:

给定n个数,去重排序后输出个数和每个数

1.map实现

#pragma GCC optimize("O2")
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
#include<set>
#include<map>
#include<limits.h>
#include<ctime>
#define N 100001
typedef long long ll;
const int inf=999999999;
const int maxn=2017;
using namespace std;
inline int read()
{
    int f=1,x=0;char ch=getchar();
    while(ch>‘9‘|ch<‘0‘)
    {
        if(ch==‘-‘)
        f=-1;
        ch=getchar();
    }
    while(ch<=‘9‘&&ch>=‘0‘)
    {
        x=(x<<3)+(x<<1)+ch-‘0‘;
        ch=getchar();
    }
    return f*x;
}
typedef map<int,bool> mp;
mp m;
int main()
{
	int n=read();
	for(int i=1;i<=n;i++)
	{int k=read();m[k]=1;}
	cout<<m.size()<<endl;
	for(mp::iterator i=m.begin();i!=m.end();i++)
	cout<<i->first<<endl;
}

2.set实现

#pragma GCC optimize("O2")
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
#include<set>
#include<map>
#include<limits.h>
#include<ctime>
#define N 100001
typedef long long ll;
const int inf=999999999;
const int maxn=2017;
using namespace std;
inline int read()
{
    int f=1,x=0;char ch=getchar();
    while(ch>‘9‘|ch<‘0‘)
    {
        if(ch==‘-‘)
        f=-1;
        ch=getchar();
    }
    while(ch<=‘9‘&&ch>=‘0‘)
    {
        x=(x<<3)+(x<<1)+ch-‘0‘;
        ch=getchar();
    }
    return f*x;
}
set<int>s;
int main()
{
    int n=read();
    for(int i=1;i<=n;i++)
    {int k=read();s.insert(k);}
    printf("%d",s.size());
    for(set<int>::iterator i=s.begin();i!=s.end();i++)
    cout<<*i<<endl;
}
时间: 2024-12-27 07:23:38

去重+排序板子(set+map)的相关文章

数组去重排序

总时间限制:  1000ms  内存限制:  1000kB 描述 小吉是银行的会计师,在处理银行帐目的时候,遇到了一些问题.有一系列整数,其中含有重复的整数,需要去掉重复后,排序输出,你能帮助小吉解决问题吗? 输入 输入数据共2行,第一行输入测试数据个数n,第二行输入这n个整数,整数之间可能有重复,整数之间可能有若干个空格.n <= 105,所有的整数不超过104. 输出 输出为1行,是这n个数去重后从小到大的排序. 样例输入 3 4 4 2 样例输出 2 4 + ? #include <io

List&lt;Map&gt;去重排序

数据格式 [ { "id":"d3e8a9d6-e4c6-4dd8-a94f-07733d3c1b59", "parentId":"6d460008-38f7-479d-b6d1-058ebc17dae3", "myorder":1, "name":"任务一" }, { "id":"6d460008-38f7-479d-b6d1-058e

java如何对map进行排序详解(map集合的使用)

今天做统计时需要对X轴的地区按照地区代码(areaCode)进行排序,由于在构建XMLData使用的map来进行数据统计的,所以在统计过程中就需要对map进行排序. 一.简单介绍Map 在讲解Map排序之前,我们先来稍微了解下map.map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等.其中这四者的区别如下(简单介绍): HashMap:我们最常用的Map,它根据key的HashCode 值来存储数据,根据key可以直接

华为机试 java 实现去重排序 用Treeset

结合一道华为的机试题来展示 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号.然后再把这些数从小到大排序,按照排好的顺序去找同学做调查.请你协助明明完成"去重"与"排序"的工作. Input Param n               输入随机数的个数 inputArray      n个随机整数组成的数组

字符串、List集合collection.sort排序 、set/map集合

String和StringBuffer的区别 1.String具有长度不可改变的属性,当对字符串做添加或者删除,替换时,不会改变String对象的内容,而是产生了一个新的字符串对象 2.StringBuffer类:StringBuffer会在缓冲区开辟一个空间,当对StringBuffer内容做添加或者删除,替换时,不会改变String对象的内容,不会产生新的对象:如果你对字符串中的内容经常修改那么使用StringBuffer,如果需要String那么最后使用StringBuffer的to St

去重 排序

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号.然后再把这些数从小到大排序,按照排好的顺序去找同学做调查.请你协助明明完成“去重”与“排序”的工作.     Input Param       n               输入随机数的个数       inputArray      n个随机整数组成的数组        Return

python实现去重排序

功能要求: 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性 他先用计算机生成了N个1-1000之间的随机整数(N<=1000),N是用户输入的,对于 其中重复的数字,只保留一个,把其余相同的数字去掉,不同的数对应着不同的学生的学号,然后再把这些 数从小到大排序,按照排好的顺序去找同学做调查,请你协助明明完成"去重"与排序工作 源代码如下: import random s = set([]) for i in range(int(raw_input('N:'))):

后缀排序板子

中暑排序 我就放个板子然后随便提点啥了 大体思路:倍增+计数排序 然后注意一个非常强的剪枝,当排名的数量等于\(n\)时,直接拿掉,而不是非要跑\(\log n\)次排序.这个剪枝在字符集比较小的时候几乎没用,但字符集小跑的本身就比较快,在字符集大的时候非常强,基本只会排序3~4次. #include <cstdio> #include <cstring> #include <algorithm> const int N=1e6+10; int Rank[N],sa[N

华为机试—字符串去重排序

输入一个字符串,去掉重复出现的字符,并把剩余的字符串排序输出. #include<iostream> #include<string> using namespace std; int main(int argc, char *argv[]) { string s; while(cin>>s) { for(int i=0;i<s.size();++i) for(int j=i+1;j<s.size();++j) { if(s[i]>s[j]) { ch