文章来源于:https://wwww.iamshuaidi.com,一个专注于校招,面试,面经的编程网站

题目:我有40亿个整数,再给一个新的整数,我需要判断新的整数是否在40亿个整数中,你会怎么做?

【请教大神】

小史回到学校,把面试的情况和计算机学院的吕老师说了一下。

小史忙拉着吕老师问,为什么我说分8次加载数据,面试官会说太慢了呢?

吕老师:哈哈,从磁盘加载数据是磁盘io操作,是非常慢的,你每次都要加载这么大的数据,还要8次,我估计你找一个数的时间可以达到分钟甚至小时级了。

小史:那如果是你,你会怎么办呢?

吕老师:其实面试官已经提示得比较明显了,他说给你一批机器,就是暗示你可以用分布式算法。你把数据分散在8台机器上,然后来一个新的数据,8台机器一起找,最后再汇总结果就行了。

小史:这样的话能快多少?

吕老师:这样应该能达到秒级。小史,你可以自己分析分析。

小史:我想想……哦,这样做的话,因为每台机器都可以一次性把数据读入内存,在比较的时候不用来回加载数据了,所以可以节省加载数据的开销!这真是个好办法。

【更好方案】

吕老师:其实这并不是最好方法,我这还有一种毫秒级的方法,想不想知道啊?

小史:当然想啊,快教教我。

小史:哦,对哦,这样我就申请40亿个位就好了,新的数转换成一个位,然后判断一下这个位是0还是1就行了。

吕老师:小史啊,考虑问题要考虑清楚啊,如果是40亿个位,那么这40亿个位哪些是0,哪些是1呢?来了一个新的数,怎么判断是否在40亿个位之中?

小史:我想想,对啊,40亿个位,40亿个数,那么每个位都是1,这。。。

吕老师:其实你可以想想,32位int的范围,总共就是2的32次方,大概42亿多点。所以你可以申请2的32次方个位。

小史:意思是我把整个整数范围都覆盖了,哦,对哦。这样一来,就可以做了,1代表第一个位,2代表第二个位,2的32次方代表最后一个位。40亿个数中,存在的数就在相应的位置1,其他位就是0。

吕老师:没错,那来了一个新的数呢?

小史:新的数就去找相应的位,比如来了一个1234,就找一下第1234位,如果是1就存在,是0就不存在啦。

吕老师:没错,那么这样的话,需要多大内存呢?

小史:我想想啊,2的32次方个位,相当于2的29次方个字节,哇,才500MB,真是节省了不少内存呢。

小史:这么厉害的算法,你是怎么想到的?

吕老师:其实这是一种非常有名的大数据算法,叫位图法,英文名叫bitmap。顾名思义,就是用位来表示状态,从而节省空间。明天正好我有一节课,就讲位图法,你可以来听一听。

【吕老师的课】

第二天,吕老师开始上课,他一开始就抛出了小史遇到的面试题。

吕老师:同学们,这道题是BAT公司的一道面试题,大家有什么思路吗?

话音刚落,蛋哥就站起来回答。蛋哥是吕老师最得意的门生,以思维活跃著称。

蛋哥:我觉得可以这样。首先,32位int的范围是42亿,40亿整数中肯定有一些是连续的,我们可以先对数据进行一个外部排序,然后用一个初始的数和一个长度构成一个数据结构,来表示一段连续的数,举个例子。

如果数据是1 2 3 4 6 7……这种的,那么可以用(1,4)和(6,2)来表示,这样一来,连续的数都变成了2个数表示。 来了一个新数之后,就用二分法进行查找了。

这样一来,最差情况就是2亿多的断点,也就是2亿多的结构体,每个结构体8个字节,大概16亿字节,1.6GB,在内存中可以放下。

吕老师:嗯,非常好,不仅给出了方案,还能主动分析空间和可行性。

小史听完后深感佩服,问题的解决方法绝对不止一种,只要肯动脑筋,即使没有学过bitmap算法,也能有别的方法来解决问题。

【课后】

下课后,小史又找到吕老师。

吕老师:但是你的理解能力还是很强的,很多东西一听就懂,这可不是谁都能做到的。

大家好,我是帅地,目前也正在更面试,面经,算法 等硬核文章,点击我的头像,你会发现相见恨晚,如果觉得文章不过,也别吝啬你的赞哦,嘻嘻

更多面试现场文章:

1. 如何判断一个数是否在40亿个整数中?

2. 如何实现可以获取最小值的栈?

3. 记一次 shopee 面试:最小栈的最优解

4. 为什么要分稳定排序和非稳定排序?

5. 如何编程解决华容道问题?

6. 如何找到字符串中的最长回文子串?

7. 如何在500w个单词中统计特定前缀的单词有多少个?

8. 如何在10亿数中找出前1000大的数?

9. 如何编程获得最多的年终红包奖?

10. 如何编程解决朋友圈个数问题?

11. 如何设计可自学习的五子棋AI?

12. 为什么MySQL数据库要用B+树存储索引?

13. 记一道字节跳动面试:变形的链表反转

14. 记一次手撕算法面试:字节跳动的面试官把我四连击了

15. 记一次阿里笔试:一行代码解决约瑟夫环问题的

16. 记一次阿里面试:面试挂在了 LRU 缓存算法设计上

17. 记一次网易笔试:前缀和的应用

18. 游戏中的敏感词过滤是如何实现的?

19. 如何只用2GB内存从20/40/80亿个整数中找到出现次数最多的数

漫画:如何判断一个数是否在40亿个整数中?相关推荐

  1. 如何判断一个数是否在40亿个整数中?

    来自:互联网侦察 小史是一个应届生,虽然学的是电子专业,但是自己业余时间看了很多互联网与编程方面的书,一心想进BAT. 今天他就去BAT中的一家面试了. 简单的自我介绍后,面试官给了小史一个问题. [ ...

  2. 「BAT面试现场」如何判断一个数是否在40亿个整数中?

    https://www.toutiao.com/a6699639753467232771/ 作者:channingbreeze 来自:公众号互联网侦察 小史是一个应届生,虽然学的是电子专业,但是自己业 ...

  3. 【BAT面试现场】如何判断一个数是否在40亿个整数中?

    作者 channingbreeze 如需转载,请联系原作者授权. 小史是一个应届生,虽然学的是电子专业,但是自己业余时间看了很多互联网与编程方面的书,一心想进BAT. 今天他就去BAT中的一家面试了. ...

  4. 【面试现场】如何判断一个数是否在40亿个整数中?

    小史是一个应届生,虽然学的是电子专业,但是自己业余时间看了很多互联网与编程方面的书,一心想进BAT. 今天他就去BAT中的一家面试了. 简单的自我介绍后,面试官给了小史一个问题. [面试现场] 题目: ...

  5. 位图法:判断一个数是否在40亿个整数中?

    微信搜索[程序员囧辉],关注这个坚持分享技术干货的程序员. 题目 最近看到一个题目:给40亿个不重复的 unsigned int 的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个 ...

  6. 利剑无意之如何判断一个数在40亿个整数中

    如何判断一个数在40亿个整数中 首先思路:用一个set存储就好了,整数32位,一个整数4个字节,40亿个整数,应该是160亿个字节,大概16GB. 此刻问题又来了,我的机器只有2GB内存,但是需要尽可 ...

  7. 【面试被虐】如何只用2GB内存从20亿,40亿,80亿个整数中找到出现次数最多的数?...

    这几天小秋去面试了,不过最近小秋学习了不少和位算法相关文章,例如 [面试现场]如何判断一个数是否在40亿个整数中? [算法技巧]位运算装逼指南 对于算法题还是有点信心的,,,,于是,发现了如下对话. ...

  8. 【面试被虐】如何只用2GB内存从20亿,40亿,80亿个整数中找到出现次数最多的数?

    这几天小秋去面试了,不过最近小秋学习了不少和位算法相关文章,例如 [面试现场]如何判断一个数是否在40亿个整数中? [算法技巧]位运算装逼指南 对于算法题还是有点信心的,,,,于是,发现了如下对话. ...

  9. 如何只用2GB内存从20/40/80亿个整数中找到出现次数最多的数

    来源:公众号[苦逼的码农] 这几天小秋去面试了,不过最近小秋学习了不少和位算法相关文章,例如: [算法技巧]位运算装逼指南 对于算法题还是有点信心的,,,,于是,发现了如下对话. 20亿级别 面试官: ...

最新文章

  1. java修炼手册3.8_Java修炼手册
  2. SqlServer在安装时提示:需要Microsoft.NET Framework 3.5 Service Pack 1 规则失败
  3. php system()和exec()差别
  4. 新来个专家吐槽我们:连qps都不懂,靠谱吗?
  5. 开发安卓app游戏_「安卓APP开发流程」安卓APP如何开发的?
  6. Origin常见使用问题集锦
  7. 机器学习(七):贝叶斯之新闻分类器
  8. CCNet: Criss-Cross Attention for Semantic Segmentation阅读笔记
  9. U盘安装win7提示缺少所需的CD/DVD驱动器设备驱动程序
  10. Bumped!(dijskra)
  11. Altium Designer19 多层板设计教程
  12. 数学建模学习思维导图
  13. reference other engineer's code to explain wheather linux terminal can display matplotlib' figure
  14. 查看mysql访问记录
  15. php取word表格一行内容,如何提取出word表格中的内容 值得一看
  16. 手机耗电统计app_Android O 新特性:精确统计 APP 电量消耗
  17. 关于10G/40G/100G数据中心光纤布线知识
  18. 一起学 pixijs(1):常见图形的绘制
  19. MSXML应用总结 开发篇(下)
  20. snort 联动iptables 配置为IPS,NIDS

热门文章

  1. 想玩游戏?要先有人做游戏
  2. 全网最齐全的《大数据选择题题库.pdf》限时开放下载!
  3. 展讯8910DM:LED驱动调试,支持一线脉冲调节
  4. 【模拟IC】版图的基础操作和基础知识总结(1)
  5. 图形学画直线c语言,计算机图形学:3种画直线算法(转)
  6. 一款聚合音乐播放器,可播放很多音乐资源,开源且完全免费。
  7. 2018-10-18中国传统文化修养
  8. 一键抠图工具,一键实现专业抠图,适合小白
  9. http://bbs.859e.com/forum.php,[15.04.05][战团1.161+][因斯维尔的抉择][1.5032]
  10. 除此之外英语翻译软件测试,除此之外,用英语怎么说?