日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/3/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 腾讯三面:40亿个QQ号码如何去重? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們來聊一道常見的考題,也出現在騰訊面試的三面環節,非常有意思。具體的題目如下:

文件中有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號碼。

海量數據的問題,要具體問題具體分析,不要眉毛胡子一把抓。有些人完全不刷題,肯定不行。有些人刷題后不加思考,不會變通,也是不行的。好了,先說這么多。我們也會一步一個腳印,爭取每篇文章講清講透一件事,也希望大家閱讀后有所收獲,心情愉快。

有道無術,術可成;有術無道,止于術

歡迎大家關注Java之道公眾號

好文章,我在看??

總結

以上是生活随笔為你收集整理的腾讯三面:40亿个QQ号码如何去重?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩视频在线观看 | 锕锕锕锕锕锕锕锕 | 日韩专区av | 色婷婷小说 | 精品人妻无码在线 | 免费亚洲一区二区 | 免费一级欧美 | 天天爱夜夜爽 | 午夜剧场免费观看 | 男人天堂网站 | 国产精品污污 | 国产精品综合久久 | www.avcao| 国产成人在线观看 | 成人精品一区二区三区中文字幕 | 成人免费影片 | 三级特黄 | 久久性感美女视频 | 韩国一区二区三区四区 | 欧美成人午夜精品久久久 | 欧美成在线观看 | 日本欧美一区二区三区不卡视频 | 捆绑japanhdxxxxvideos | 免费看污的网站 | 青青青在线 | 91精品播放 | 亚洲精品国产精品国自产在线 | 亚洲综合图色40p | 欧美草比视频 | 久久人人爽 | 精品人妻少妇AV无码专区 | 操操综合网 | 日韩超碰| 精品国产一区二区不卡 | 国产成人亚洲精品 | 欧美黑人精品一区二区不卡 | 7mav视频 | 亚洲区一区二区 | 国产aⅴ无码片毛片一级一区2 | 95看片淫黄大片一级 | 999热精品视频 | 久久网免费视频 | 人人澡人人插 | 夜夜撸av | jizz成熟丰满日本少妇 | 夜色精品 | 天天天色| 日本少妇性生活 | 国产一级片免费播放 | 人人看超碰 | 国产精品久久一区二区三区动 | 在线色图| 狠狠综合久久av一区二区 | 91麻豆精品国产91久久久无需广告 | www视频免费观看 | 国产又粗又黄的视频 | 丁香婷婷激情五月 | 99精品人妻少妇一区二区 | 操大逼网站 | 91丨九色丨蝌蚪丨丝袜 | 国产成人精品视频 | 宝贝乖h调教灌尿穿环 | 在线视频网 | 色欧美88888久久久久久影院 | 黄色永久网站 | 精品国产av无码一区二区三区 | 五月天社区 | 亚洲综合图区 | 动漫艳母在线观看 | 911精品国产一区二区在线 | 黄色录像片子 | 日韩裸体视频 | 三级视频在线观看 | 69re视频| 一本大道久久a久久综合婷婷 | 色偷偷免费视频 | 五月激情婷婷丁香 | 少妇无内裤下蹲露大唇视频 | 四虎国产精品永久免费观看视频 | 九九热视频精品在线观看 | 调教小屁屁白丝丨vk | 在线看成人 | 久久免费av | 欧美福利在线视频 | 国产超碰| 激情视频网址 | 成人精品三级av在线看 | 欧美男女动态图 | 亚洲精品aaa | 少妇婷婷| 亚洲一区二区三区四区 | 黑人与日本少妇高潮 | 欧美国产一区二区三区 | 日本一级黄色大片 | 性chinese天美传媒麻 | 成人性做爰片免费视频 | www.久操| 视频一区日韩 | 日本高清视频网站 |