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 版权协议,转载请附上原文出处链接和本声明。