用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,表示这个数字是重复的

这种算法最大的优势就是快。一次循环搞定,而且所有操作都是位运算
缺点就是浪费内存,另外只能判断重复,却不能判断重复次数,重复一次和重复十次效果相同

参考技术A public Set distinctData()

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个整数去重,效率要高些的主要内容,如果未能解决你的问题,请参考以下文章

C++编程基础题解:插入排序

输入n个整数,对这n个整数去重之后按原顺序输出用python怎么写?

[编程题] 糖果谜题 C++实现输入未知个整数

华为OD机试模拟题用 C++ 实现 - IPv4 地址转换成整数(2023.Q1)

C语言编程,对文件中数据进行处理

用java编程 输入两个整数并比较它们的大小