40亿个手机号码如何去重?
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亿个手机号码如何去重?相关推荐
- 腾讯太狠:40亿QQ号, 给你1G内存,怎么去重?
说在前面 在40岁老架构师 尼恩的读者社区(50+)中,最近有小伙伴拿到了一线互联网企业如腾讯.美团.阿里.拼多多.极兔.有赞.希音的面试资格,遇到一几个很重要的面试题: 40亿Q号如何设计算法去重, ...
- 40亿个QQ号,限制1G内存,如何去重?
40亿个unsigned int,如果直接用内存存储的话,需要: 4*4000000000 /1024/1024/1024 = 14.9G ,考虑到其中有一些重复的话,那1G的空间也基本上是不够用的. ...
- 腾讯三面:40亿个QQ号码如何去重?
我们来聊一道常见的考题,也出现在腾讯面试的三面环节,非常有意思.具体的题目如下: 文件中有40亿个QQ号码,请设计算法对QQ号码去重,相同的QQ号码仅保留一个,内存限制1G. 这个题目的意思应该很清楚 ...
- 利用bitmap处理海量数据问题:43亿QQ号所占内存大小为什么是512M?40亿个QQ号如何去重?
参考: 腾讯43亿QQ号码用完后怎么办? 腾讯三面:40亿个QQ号码如何去重 一.背景: 首先,明确两点: QQ号是 unsigned int 类型(4字节无符号整数,共32bit), 也就是说 Q ...
- 40亿个QQ号,限制1G内存,如何去重?【已通过代码实现】
前几天发现一个有趣的文章 "40亿个QQ号,限制1G内存,如何去重?",发现很有意思,就想着用代码实现一下,下面是分析和实现过程 一.审题分析 一个 QQ 号现在最长有 11 位, ...
- 腾讯三面:40 亿个 QQ 号码如何去重?
今天,我们来聊一道常见的考题,也出现在腾讯面试的三面环节,非常有意思.具体的题目如下: 文件中有40亿个QQ号码,请设计算法对QQ号码去重,相同的QQ号码仅保留一个,内存限制1G. 这个题目的意思应该 ...
- 40亿骚扰电话拨出,6亿用户隐私泄露,央视315曝光AI黑暗面
一璞 问耕 假装发自 凹非寺 量子位 出品 | 公众号 QbitAI 人工智能.大数据,登上了今年的央视3.15. 一切都与令人不胜其烦的骚扰电话有关.而且,这次央视的曝光让更多人了解到,给你打骚扰电 ...
- 3.15 曝光:40 亿 AI 骚扰电话和 11 家合谋者
整理|一一 出品 | AI科技大本营(ID:rgznai100) 尽管手机有骚扰电话标注,过滤来源电话功能,政府监管部门也宣称在大力打击,但是,你总有机会接到一通骚扰电话. 为什么这些推销股票.贷款的 ...
- 851-40亿个号码如何去重?
40亿个QQ号码如何去重? 文件中有40亿个QQ号码,请设计算法对QQ号码去重,相同的QQ号码仅保留一个,内存限制1G. 在原题中,实际有40亿个QQ号码,为了方便起见,在图解和叙述时,仅以4个QQ为 ...
- 3·15曝光丨智能机器人一年拨打40亿个骚扰电话,6亿人信息已遭泄露!
在昨晚的315晚会上,一条探针盒子+数据匹配+智能外呼机器人的灰色产业链遭到曝光.据报道,智能外呼机器人一年拨打电话可达40多亿个,探针盒子公司收集有全国6亿用户的各类信息! "先生/女士, ...
最新文章
- Swift开发:仿Clear手势操作(拖拽、划动、捏合)UITableView
- poj 3468 A Simple Problem with Integers(线段树区区)
- stl swap函数_vector :: swap()函数以及C ++ STL中的示例
- LeetCode 443. 压缩字符串(双指针)
- C#LeetCode刷题-双指针
- 【英语学习】【Level 07】U03 Amazing wonders L5 Modern structures in China
- 帆软报表决策系统重置用户密码插件
- 树莓派Raspberry实践笔记—显示分辨率配置
- 如何自学python-小白是如何自学Python逆袭成功的?
- 常见测温传感器及电路原理图
- c语言常见运行错误提示,c语言运行时的错误提示
- WSA系列API函数
- 微服务与微服务架构的主要思想和原则
- 基于opencv的SFR算法
- 最小生成树cf1245D
- 浅谈Google认证失败项分析
- 移动搜狗关键词排名查询API接口
- VCD(俗称影音光碟)
- 云服务器买来之后必做的几件事——你做了吗!【❤️建议收藏❤️】
- linux中zlib解压错误,zipimport.zipimporter错误:无法解压缩数据;zlib在Linux中不可用...