腾讯2011面试题

今天去腾讯面试, 面试官出了一道题:

有10亿个整数, 不重复, 不连续. (整数的范围按32位平台计算. 范围为0~2^32).

求: 这10亿个整数中, 值在中间的那个数 (即第5亿个大的那个数).

 

面试官给我的答题时间是他抽完一根烟的时间. 结果悲剧了. 他只用了一分钟左右就抽完了.而我却没做出来.

回来细想, 根据面试官的提示. 想到用位来做最好.

将一个整数对应一个bit. 所以 0~2^32之间所有整数, 可以用2^32 * 1bit / 8 = 2^29 B = 512MB. 这样可以在内存里申请512M内存来保存.

----->假设整数与位组之间的映射关系为1对应第1位, 2,对应第2位, ..., 2^32对应最后一位.

对10亿个数做一次遍历. 如果某个数存在, 就在相应的位组位置标记为1. 最后位组有10亿个1.

还记得整数与位组对应的关系吗?

位组从头开始查找第5亿个1所在的位置就是中间值的那个数.

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值