用Java或C++编程实现10000个整数去重,效率要高些
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用Java或C++编程实现10000个整数去重,效率要高些相关的知识,希望对你有一定的参考价值。
补充一下还要把重复的元素找出来,再打印出来。
追求效率的话,肯定得用C++整数有范围限制吗?如果范围小的话,可以打表,比如1000万以内的数字的话,用1M多的bit表就可以一次性筛选出来。int范围的话,用512M内存,可以一次循环扫过,但是内存开销太大
如果没有内存上的限制 这个方法绝对是最快的。而且也可以找到重复的
如果没有范围,或者范围太大,不适合达标,可以用C++ STL中的priority_queue 依次压入 然后弹出,有重复的去掉追问
怎么个打表法,可不可以将程序大体写来看看
追答假定内存足够,整数范围为正整数0-100万
那么每个Bit对应一个数字 100万需要内存为1000000/8=125000
程序可以写成这样
#include
unsigned char map[125000];
int main()
int i, a;
for(i = 0; i < 10000; i ++)
scanf("%d", &a);
if(map[a/8] & (1<<(a%8)))
printf("%d is repeat\\n", a);
else map[a/8]|=1<<(a%8);
大致就是这样,从0开始计数,每个数值对应一位(1个bit),然后读入数据,如果没有记录过这个数据,那么这一位为0,把它置成1, 如果已经是1,表示这个数字是重复的
这种算法最大的优势就是快。一次循环搞定,而且所有操作都是位运算
缺点就是浪费内存,另外只能判断重复,却不能判断重复次数,重复一次和重复十次效果相同
Map<String ,Object> map=new Map<String ,Object>();
for(int i=0;i<10000;i++)
String str=""+你的整数数据;
map.put(str,i);
return map.keySet();
for(String s: distinctData())
System.out.println(Integer.parseInt(s));
以上是关于用Java或C++编程实现10000个整数去重,效率要高些的主要内容,如果未能解决你的问题,请参考以下文章
输入n个整数,对这n个整数去重之后按原顺序输出用python怎么写?