bitmapFlag[123] = 1bitmapFlag[567] = 1bitmapFlag[123] = 1bitmapFlag[890] = 1
实际上就是:
bitmapFlag[123] = 1bitmapFlag[567] = 1bitmapFlag[890] = 1
然后从小到大遍历所有正整数(4字节),当bitmapFlag值为1时,就表明该数是存在的 。
而且,从上面的过程可以看到,自动实现了去重 。显然,这种方式可以通过腾讯的面试 。
文章插图
扩展练习一
文件中有40亿个互不相同的QQ号码,请设计算法对QQ号码进行排序,内存限制1G.
很显然,直接用bitmap, 标记这40亿个QQ号码的存在性,然后从小到大遍历正整数,当bitmapFlag的值为1时,就输出该值,输出后的正整数序列就是排序后的结果 。
请注意,这里必须限制40亿个QQ号码互不相同 。通过bitmap记录,客观上就自动完成了排序功能 。
扩展练习二
【腾讯三面:40亿个qq号码如何去重复登录】文件中有40亿个互不相同的QQ号码,求这些QQ号码的中位数,内存限制1G.
我知道,一些刷题经验丰富的人,最开始想到的肯定是用堆或者文件切割,这明显是犯了本本主义错误 。直接用bitmap排序,当场搞定中位数 。
扩展练习三
文件中有40亿个互不相同的QQ号码,求这些QQ号码的top-K,内存限制1G.
我知道,很多人背诵过top-K问题,信心满满,想到用小顶堆或者文件切割,这明显又是犯了本本主义错误 。直接用bitmap排序,当场搞定top-K问题 。
扩展练习四
文件中有80亿个QQ号码,试判断其中是否存在相同的QQ号码,内存限制1G.
我知道,一些吸取了经验教训的人肯定说,直接bitmap啊 。然而,又一次错了 。根据容斥原理可知:
因为QQ号码的个数是43亿左右(理论值2^32 - 1),所以80亿个QQ号码必然存在相同的QQ号码 。
海量数据的问题,要具体问题具体分析,不要眉毛胡子一把抓 。有些人完全不刷题,肯定不行 。有些人刷题后不加思考,不会变通,也是不行的 。好了,先说这么多 。我们也会一步一个脚印,争取每篇文章讲清讲透一件事,也希望大家阅读后有所收获,心情愉快 。
推荐阅读
- 在建立网络连接的时候会出现提示
- 腾讯支付设置方法,苹果手机怎么购买腾讯会员用微信支付的
- 在使用Word文档的过程中自然是文档技巧掌握的越多使用的效率就会越高
- Win8系统如何取消定时关机?
- 高德地图添加货车导航信息方法介绍
- 如下图: windows7教程windows8教程windows10教程
- 找到驾驶舱话音记录器有什么用
- soul是什么软件到底是干嘛用的
- 2021淘宝双十一跨店满减使用时间及规则