从2.5亿个数字里面找出不重复的数字的个数的bitmap的解法思路

  • Post author:
  • Post category:其他


2.5E个整数(认为无符号,取值范围为0~2

32

)一共需要2

32

*2bit=1G内存。

与40亿个数中找是否存在类似,40E题目是每个数占一个bit,一个字节可以放8个数,位置为value//8,偏移为value%8。因为重复与否需要2个bit位来表示,00表示未出现,01表示出现一次,10表示出现多次,11表示无意义。因此1个字节放4个数,位置为value//4,偏移为(value%4)x2(一个数需要2个bit位)

按照40E题目中方法读入每个数进行处理,读入数字后先看高位,高位为1则跳过,高位为0则根据低位做对应处理。

全部处理完成后遍历bitmap,对每个字节,用3(0011)与最低两位相与,查看状态情况。然后3<<2,将3向右移2位,即12(1100),查看后两位情况。以此类推,直到用(11000000)查看最高两位情况,该字节遍历完毕。重置为3遍历下一字节。

若在这个过程中发现01,则通过计算所在位置和偏移量还原对应数字。

如果有需要再将其还原为有符号整数即可。



版权声明:本文为weixin_43955216原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。