博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
大数据面试题——如何在大量的数据中找出不重复的数
阅读量:5157 次
发布时间:2019-06-13

本文共 585 字,大约阅读时间需要 1 分钟。

问题描述:

在2.5亿个整数中找出不重复的数,注意,内存不足以容纳2.5亿个整数。

 

分析解读:

方法一:分治法

采用hash的方法,把这2.5亿个数划分到更小的文件中,从而保证每个文件的大小不超过可用内存的大小。然后对于每个小文件而言,所有的数据可以一次性被加载到内存中,因此可以使用字典或set来找到每个小文件中不重复的数。当处理完所有的文件后就可以找出这2.5亿个整数中所有的不重复的数。

方法二:位图法

对于整数相关的算法的求解,位图法是一种非常实用的算法。如果可用的内存空间超过1GB就可以使用这种方法。具体思路:假设整数占用4B(如果占用8B,那么求解思路类似,只不过需要占用更大的内存),4B也就32位,可以表示的整数的个数为2^32.由于题目中只查找不重复的数,而不关心具体数字出现的次数,因此可以分别使用2bit来表示各个数字的状态:用00表示这个数字没有出现过,01表示出现过一次,10表示出现过多次,11暂不使用。

根据上面的逻辑,在遍历这2.5亿个整数的时候,如果这个整数对应的位图的位为00,那么修改为01,如果为01那么改为10,如果为10则保持不变。这样当所有数据遍历完成后,可以再遍历一遍位图,位图为01的数字就是没有重复的数字。

转载于:https://www.cnblogs.com/circleyuan/p/10350172.html

你可能感兴趣的文章
WCF元数据发布的2种方式:httpGetEnabled与mex
查看>>
值类型与引用类型传递的艺术
查看>>
jmeter 通过ant集成到jenkins
查看>>
el表达式
查看>>
Oracle Enterprise Linux
查看>>
实验:图的创建
查看>>
Android 隐藏、显示软键盘方法
查看>>
Java类加载器 以及类加载器的委托模型
查看>>
Move Zeroes
查看>>
HDU - 6464 免费送气球(线段树二分)
查看>>
git 用法
查看>>
Appium+Python API相关知识了解
查看>>
Centos 6\7下yum安装R
查看>>
Java基础之路--引用数据类型之数组
查看>>
C#网络连接 socket支持post,get之类http协议(chunked,gzip),同时支持webservice协议。...
查看>>
2018软工第六次作业
查看>>
Reactor模式详解
查看>>
GeoServer+PostgreSQL+PostGIS+pgRouting实现最短路径查询
查看>>
Java50道经典习题-程序27 求素数
查看>>
Math类的三个方法比较: floor() ceil() round()
查看>>