您的位置:首页 > 其它

海量数据一,从2.5亿个正整数中找到不重复的整数

2016-09-19 00:11 281 查看
题目:从2.5亿个正整数中找到不重复的整数。

解答:

int有4个字节,32位bit,最多可表示232个正整数,即4G个正整数(1G=230,1K=210)

用2Bitmap法,每个正整数用两个bit的标志位,00表示没有出现,01表示出现1次,10表示出现多次。

开辟一个用2Bitmap法标志4G个正整数的桶数组,则总共需要4G*2bit=1G内存。

扫描整数,如果标志位为00(=0),则将对应位置的标志置为01(=1)。如果为01,则置为10(=2)。

数组用byte数组 来表示,byte[] flag;

一个byte 8bit,

i/j3210
000000000
100000000
换算的时候,

行数int i=number/4;

列数int j=number%4;

则number对应的标志位为int numberFlag=(flag[i]&(0x03<<(2*j)))>>(2*j);

扫描整数时可能需要设置新的标志值,设置时

(flag[i]&(~(0x03<<(2*j))&0xff))|(((newFlag%4)<<(2*j))&0xff)

标志位所在那俩bit更新,其他保持不变。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  海量数据
相关文章推荐