一道曾经微软的面试题

题目描述:有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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码随想录

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值