您的位置:首页 > 职场人生

腾讯2011面试题

2011-10-16 21:16 218 查看
今天去腾讯面试, 面试官出了一道题:

有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所在的位置就是中间值的那个数.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: