首页 > 网名 正文
〔怎么修改QQ初始名字〕qq名字颜色

时间:2023-07-29 作者:佚名

今天,我们来聊一道常见的考题,也出现在腾讯面试的三面环节,非常有意思。具体的题目如下:

文件中有40亿个QQ号码,请设计算法对QQ号码去重,相同的QQ号码仅保留一个,内存限制1G.

这个题目的意思应该很清楚了,比较直白。为了便于大家理解,我来画个动图玩玩,希望大家喜欢。

能否做对这道题目,很大程度上就决定了能否拿下腾讯的offer,有一定的技巧性,一起来看下吧。

在原题中,实际有40亿个QQ号码,为了方便起见,在图解和叙述时,仅以4个QQ为例来说明。

方法一:排序

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

原始的QQ号为:

排序后的QQ号为:

去重就简单了:

可是,面试官要问你,去重一定要排序吗?显然,排序的时间复杂度太高了,无法通过腾讯面试。

方法二:hashmap

既然直接排序的时间复杂度太高,那就用hashmap吧,具体思路是把QQ号码记录到hashmap中:

mapFlag[123] = true mapFlag[567] = true mapFlag[123] = true mapFlag[890] = true

由于hashmap的去重性质,可知实际自动变成了:

mapFlag[123] = true mapFlag[567] = true mapFlag[890] = true

很显然,只有123,567,890存在,所以这也就是去重后的结果。

可是,面试官又要问你了:实际要存40亿QQ号码,1G的内存够分配这么多空间吗?显然不行,无法通过腾讯面试。

方法三:文件切割

显然,这是海量数据问题。看过很多面经的求职者,自然想到文件切割的方式,避免内存过大。

可是,绞尽脑汁思考,要么使用文件间的归并排序,要么使用桶排序,反正最终是能排序的。

既然排序好了,那就能实现去重了,貌似就万事大吉了。我只能坦白地说,高兴得有点早哦。

接着,面试官又要问你:这么多的文件操作,效率自然不高啊。显然,无法通过腾讯面试。

方法四:bitmap

来看绝招!我们可以对hashmap进行优化,采用bitmap这种数据结构,可以顺利地同时解决时间问题和空间问题。

在很多实际项目中,bitmap经常用到。我看了不少组件的源码,发现很多地方都有bitmap实现,bitmap图解如下:

这是一个unsigned char类型,可以看到,共有8位,取值范围是[0, 255],如上这个unsigned char的值是255,它能标识0~7这些数字都存在。

同理,如下这个unsigned char类型的值是254,它对应的含义是:1~7这些数字存在,而数字0不存在:

由此可见,一个unsigned char类型的数据,可以标识0~7这8个整数的存在与否。以此类推:

  • 一个unsigned int类型数据可以标识0~31这32个整数的存在与否。
  • 两个unsigned int类型数据可以标识0~63这64个整数的存在与否。

显然,可以推导出来:512MB大小足够标识所有QQ号码的存在与否,请注意:QQ号码的理论最大值为2^32 - 1,大概是43亿左右。

接下来的问题就很简单了:用512MB的unsigned int数组来记录文件中QQ号码的存在与否,形成一个bitmap,比如:

bitmapFlag[123] = 1 bitmapFlag[567] = 1 bitmapFlag[123] = 1 bitmapFlag[890] = 1

实际上就是:

bitmapFlag[123] = 1 bitmapFlag[567] = 1 bitmapFlag[890] = 1

然后从小到大遍历所有正整数(4字节),当bitmapFlag值为1时,就表明该数是存在的。

而且,从上面的过程可以看到,自动实现了去重。显然,这种方式可以通过腾讯的面试。

扩展练习一

文件中有40亿个互不相同的QQ号码,请设计算法对QQ号码进行排序,内存限制1G.

很显然,直接用bitmap, 标记这40亿个QQ号码的存在性,然后从小到大遍历正整数,当bitmapFlag的值为1时,就输出该值,输出后的正整数序列就是排序后的结果。

请注意,这里必须限制40亿个QQ号码互不相同。通过bitmap记录,客观上就自动完成了排序功能。

扩展练习二

文件中有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号码。

海量数据的问题,要具体问题具体分析,不要眉毛胡子一把抓。有些人完全不刷题,肯定不行。有些人刷题后不加思考,不会变通,也是不行的。好了,先说这么多。我们也会一步一个脚印,争取每篇文章讲清讲透一件事,也希望大家阅读后有所收获,心情愉快。

本文信息为网友自行发布旨在分享与大家阅读学习,文中的观点和立场与本站无关,如对文中内容有异议请联系处理。

本文链接:https://www.paituo.cc/wangming/1151954.html

  • 小编推荐

    怎么修改qq宠物名字、我的世界怎么修改宠物名字!

    怎么修改qq宠物名字,我的世界怎么修改宠物名字,怎么修改qq名字怎么改相关介绍,这两年来,随着人们生活的水平的提高,越来越多人开始养宠物,宠物在我们最孤单的时候陪伴我们成长,是我们的小伙伴,很多年轻人也加入了宠物用品创业道路上,那么宠物用品公司起什么名字更创意呢?   一、宠物用

    〈修改qq自己的名字〉怎么修改qq名字怎么改…

    修改qq自己的名字,怎么修改qq名字怎么改,修改qq在线手机型号相关介绍,微信公众号学校共青团,综合整理自嫩江市公安局反诈中心”、陕西警方、鄂尔多斯检查 高考之后 考生们的头等大事 当然就是填志愿啦 这是许多学子 迈入大学之门的关键一步 也让一些不法分子嗅到“商机” 打起了

    〔QQ名字带颜色代码〕qq名字变颜色代码? qq名字颜色代码怎么用

    QQ名字带颜色代码,qq名字变颜色代码,qq名字颜色代码怎么用相关介绍,论文作图不知道怎么配色,来看这篇文章就对了!学习要从模仿开始,好的配色如何获取? 1.QQ截图工具,可以截图、可以取色。不用单独下载,不占内存,方便实用呐。 原图: 取色:如何使用:启动QQ后,通常按

    [怎样改变手机qq名字颜色]怎么改变手机应用的名字… 怎样改变手机语音助手的名字

    怎样改变手机qq名字颜色,怎么改变手机应用的名字,怎样改变软件图标和名字相关介绍,在手机的世界中,凝聚柔性屏、精密铰链等尖端技术的折叠屏手机无疑处在金字塔的塔尖。然而对于折叠屏手机来说,大屏在普通人的心目中似乎一直没什么作用,这也让折叠屏手机成了大家眼中“昂贵的玩具”。 荣耀Mag

    怎么qq修改名字—qq名字颜色… 怎么修改qq实名认证

    怎么qq修改名字,qq名字颜色,怎么修改qq名字怎么改相关介绍,在使用QQ群的时候如果我们修改群备注就很容易查找到而且很好的做归类了,那么我们这篇经验将分享如何修改QQ群的备注。 工具:电脑、QQ 1.这里我们是以电脑来举例子的,首先我们打开我们的QQ并且登陆。

    「qq名字带颜色的字」qq名字颜色怎么变颜色 qq飞车名字颜色怎么弄

    qq名字带颜色的字,qq名字颜色怎么变颜色,qq名字颜色代码大全相关介绍,编辑导语:近年来,陪聊服务在网络上悄然兴起,只要花几十元或几百元下单,就可以获得“聊天”“哄睡”“分手挽回”“情感代追”等服务。本文作者对此进行了调查,探究陪聊服务背后的涉黄现象,一起来看一下吧。 尽

    qq名字颜色怎么才能变qq名字怎么有颜色…

    qq名字颜色怎么才能变,qq名字怎么有颜色,qq名字颜色怎么变颜色相关介绍,在使用qq空间的过程中,我们能看到很多好友的评论内容都是彩色的文字,那么qq空间怎么设置彩色字体呢?本文就将为大家介绍qq空间彩色文字的设置方法,感兴趣的小伙伴们可以来一起看看哦! qq空间怎么设置彩

    [qq名字颜色这种怎么弄]qq名字怎么有颜色…

    qq名字颜色这种怎么弄,qq名字怎么有颜色,qq名字颜色怎么取消相关介绍,今天,微信又上热搜啦。 作为一个用户超十亿的国民级应用,微信的一举一动都会引起用户们争相关注和讨论。 但说实话嚯,并不是每个新功能都能拥有那么高的讨论度,能登上热搜就说明那个功能戳到了用户两大痛点。