腾讯面试题:
题目:给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。
如果直接存储,40亿int数据如果存起来大概需要16G的空间,显然是不可能一次性存储完。
如果采用位图这种存储结构,因为一个数存在不存在只需要用两种状态就可以表示出来(1存在,0不存在),所以一个int数据有32个位,可以表示32个数据存在不存在,因此16G的数据用位图来存在只需要500M左右的空间。
位图:就是用每一位来存放某种状态,每个比特位为“0”或“1”,“0”代表该数不存在,“1”代表不存在。适用于大规模数据,但数据状态又不是很多的情况。
相关操作如下: