40亿个手机号码如何去重?

一、概述

常见的面试题:文件中有40亿个手机号码,请设计算法对手机号码去重,内存限制1G

二、 排序

最直接简单的方式是对所有的手机号码进行排序,重复的手机号码必然相邻,保留第一个,去掉后面重复的就行。

显然,排序的时间复杂度太高了

三、HashMap

既然直接排序的时间复杂度太高,那就用HashMap,具体思路是把手机号码记录到HashMap中,用HashMap的key唯一来去重。

实际要存40亿手机号码,1G的内存够分配这么多空间吗?显然不行

三、文件切割

显然,这是海量数据问题。工作中遇到过,很自然想到文件切割的方式(大文件拆成小文件),避免内存过大。拆分可以通过hashcode进行拆分,相同的手机号码会被拆分到同一个小文件中,之后在每个小文件去重。

这么多的文件操作,效率自然不高啊。

四、bitmap

可以对hashmap进行优化,采用bitmap这种数据结构,可以顺利地同时解决时间问题和空间问题。在很多实际项目中,bitmap经常用到。 一个unsigned int类型数据可以标识0~31这32个整数的存在与否。

/*** @author yangyc*     内存中装入头2位(手机号第一位始终为1,因此只需装入后面2位),需要99(2个9)个bit,*     99 bit = 99/8 byte =12.375 byte*     BitSet bitSet=new BitSet(99);**   内存中装入手机号码后8位,需要99999999(8个9)个bit*   99999999 bit = (99999999/8) byte = (99999999 / (8 * 1024)) KB = (99999999 / 8 *1024*1024) M = 11.92M*       *   BitSet bitSet1= new BitSet(999999999);*/

这样使用位图值为1时,就表明该数是存在的。而且通过bitmap记录,客观上就自动完成了排序功能。

五、总结

使用了 bitmap 之后,数字的排序功能、中位数、top-K问题等扩展问题都解决。一般海量的数据,而且有内存限制的问题都是通过 文件切割(大文件拆成小文件)或者bitmap位图 来解决

40亿个手机号码如何去重?相关推荐

  1. 腾讯太狠:40亿QQ号, 给你1G内存,怎么去重?

    说在前面 在40岁老架构师 尼恩的读者社区(50+)中,最近有小伙伴拿到了一线互联网企业如腾讯.美团.阿里.拼多多.极兔.有赞.希音的面试资格,遇到一几个很重要的面试题: 40亿Q号如何设计算法去重, ...

  2. 40亿个QQ号,限制1G内存,如何去重?

    40亿个unsigned int,如果直接用内存存储的话,需要: 4*4000000000 /1024/1024/1024 = 14.9G ,考虑到其中有一些重复的话,那1G的空间也基本上是不够用的. ...

  3. 腾讯三面:40亿个QQ号码如何去重?

    我们来聊一道常见的考题,也出现在腾讯面试的三面环节,非常有意思.具体的题目如下: 文件中有40亿个QQ号码,请设计算法对QQ号码去重,相同的QQ号码仅保留一个,内存限制1G. 这个题目的意思应该很清楚 ...

  4. 利用bitmap处理海量数据问题:43亿QQ号所占内存大小为什么是512M?40亿个QQ号如何去重?

    ​参考: 腾讯43亿QQ号码用完后怎么办? 腾讯三面:40亿个QQ号码如何去重 一.背景: 首先,明确两点: QQ号是 unsigned int 类型(4字节无符号整数,共32bit), 也就是说 Q ...

  5. 40亿个QQ号,限制1G内存,如何去重?【已通过代码实现】

    前几天发现一个有趣的文章 "40亿个QQ号,限制1G内存,如何去重?",发现很有意思,就想着用代码实现一下,下面是分析和实现过程 一.审题分析 一个 QQ 号现在最长有 11 位, ...

  6. 腾讯三面:40 亿个 QQ 号码如何去重?

    今天,我们来聊一道常见的考题,也出现在腾讯面试的三面环节,非常有意思.具体的题目如下: 文件中有40亿个QQ号码,请设计算法对QQ号码去重,相同的QQ号码仅保留一个,内存限制1G. 这个题目的意思应该 ...

  7. 40亿骚扰电话拨出,6亿用户隐私泄露,央视315曝光AI黑暗面

    一璞 问耕 假装发自 凹非寺 量子位 出品 | 公众号 QbitAI 人工智能.大数据,登上了今年的央视3.15. 一切都与令人不胜其烦的骚扰电话有关.而且,这次央视的曝光让更多人了解到,给你打骚扰电 ...

  8. 3.15 曝光:40 亿 AI 骚扰电话和 11 家合谋者

    整理|一一 出品 | AI科技大本营(ID:rgznai100) 尽管手机有骚扰电话标注,过滤来源电话功能,政府监管部门也宣称在大力打击,但是,你总有机会接到一通骚扰电话. 为什么这些推销股票.贷款的 ...

  9. 851-40亿个号码如何去重?

    40亿个QQ号码如何去重? 文件中有40亿个QQ号码,请设计算法对QQ号码去重,相同的QQ号码仅保留一个,内存限制1G. 在原题中,实际有40亿个QQ号码,为了方便起见,在图解和叙述时,仅以4个QQ为 ...

  10. 3·15曝光丨智能机器人一年拨打40亿个骚扰电话,6亿人信息已遭泄露!

    在昨晚的315晚会上,一条探针盒子+数据匹配+智能外呼机器人的灰色产业链遭到曝光.据报道,智能外呼机器人一年拨打电话可达40多亿个,探针盒子公司收集有全国6亿用户的各类信息! "先生/女士, ...

最新文章

  1. Swift开发:仿Clear手势操作(拖拽、划动、捏合)UITableView
  2. poj 3468 A Simple Problem with Integers(线段树区区)
  3. stl swap函数_vector :: swap()函数以及C ++ STL中的示例
  4. LeetCode 443. 压缩字符串(双指针)
  5. C#LeetCode刷题-双指针
  6. 【英语学习】【Level 07】U03 Amazing wonders L5 Modern structures in China
  7. 帆软报表决策系统重置用户密码插件
  8. 树莓派Raspberry实践笔记—显示分辨率配置
  9. 如何自学python-小白是如何自学Python逆袭成功的?
  10. 常见测温传感器及电路原理图
  11. c语言常见运行错误提示,c语言运行时的错误提示
  12. WSA系列API函数
  13. 微服务与微服务架构的主要思想和原则
  14. 基于opencv的SFR算法
  15. 最小生成树cf1245D
  16. 浅谈Google认证失败项分析
  17. 移动搜狗关键词排名查询API接口
  18. VCD(俗称影音光碟)
  19. 云服务器买来之后必做的几件事——你做了吗!【❤️建议收藏❤️】
  20. linux中zlib解压错误,zipimport.zipimporter错误:无法解压缩数据;zlib在Linux中不可用...

热门文章

  1. python输出语句中引用多个变量
  2. 康佳电视应用助手服务器连接超时,TV盒子助手如何连接智能电视远程推送软件?解决方法如下...
  3. 安川mpe720编程手册_南宁安川机器人学校
  4. Python基础手册
  5. 图书管理系统【C++】
  6. Java--文本文档编写Java代码
  7. 友善的小精灵 Casper
  8. matlab绘制奈奎斯特图
  9. matlab的图像滤波,Matlab实现图像滤波
  10. 告诉你一个真实的全球化