一道曾经微软的面试题

题目描述:有10亿个至多9位电话号码,找出这些电话号码不重复的个数,内存之给你256M的空间

分析:这相当于10亿个int型整数,每个int占四个字节,40亿个字节,也就说储存这些电话号码需要4G的内存空间,所以必须对这些电话号码进行压缩

解决方法:可以用一个位来表示这个电话号码是否存在,也就是说需要十亿位,1表示有,0表示无,用int来表示这十亿位,需要用(十亿+32)/32个int型整数来存储这10亿位,那么需要多少空间呢,需要(十亿+32)/32*4个字节=125M,这样内存就足够大让我们遍历这10亿个电话号码了,每个电话号码在十亿以内,所以电话号码的大小就表示这个电话号码在十亿位中第几位为1, 找到相对应的int来进行储存,例如:电话号码123,那么123/32=3,123%32=27,则这个表示这个电话号码的存在就可以把第3+1个int的第27位表示1

发布了214 篇原创文章 · 获赞 78 · 访问量 25万+

猜你喜欢

转载自blog.csdn.net/youngyangyang04/article/details/38776303