国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【面試被虐】如何只用2GB內存從20億,40億,80億個整數中找到出現次數最多的數?

468122151 / 3022人閱讀

摘要:這幾天小秋去面試了,不過最近小秋學習了不少和位算法相關文章,例如面試現場如何判斷一個數是否在億個整數中算法技巧位運算裝逼指南對于算法題還是有點信心的,,,,于是,發現了如下對話。

這幾天小秋去面試了,不過最近小秋學習了不少和位算法相關文章,例如

【面試現場】如何判斷一個數是否在40億個整數中?

【算法技巧】位運算裝逼指南

對于算法題還是有點信心的,,,,于是,發現了如下對話。

20億級別

面試官:如果我給你 2GB 的內存,并且給你 20 億個 int 型整數,讓你來找出次數出現最多的數,你會怎么做?

小秋:(嗯?怎么感覺和之前的那道判斷一個數是否出現在這 40 億個整數中有點一樣?可是,如果還是采用 bitmap 算法的話,好像無法統計一個數出現的次數,只能判斷一個數是否存在),我可以采用哈希表來統計,把這個數作為 key,把這個數出現的次數作為 value,之后我再遍歷哈希表哪個數出現最多的次數最多就可以了。

面試官:你可以算下你這個方法需要花費多少內存嗎?

小秋:key 和 value 都是 int 型整數,一個 int 型占用 4B 的內存,所以哈希表的一條記錄需要占用 8B,最壞的情況下,這 20 億個數都是不同的數,大概會占用 16GB 的內存。

面試官:你的分析是對的,然而我給你的只有 2GB 內存。

小秋:(感覺這道題有點相似,不過不知為啥,沒啥思路,這下涼涼),目前沒有更好的方法。

面試官:按照你那個方法的話,最多只能記錄大概 2 億多條不同的記錄,2 億多條不同的記錄,大概是 1.6GB 的內存。

小秋:(嗯?面試官說這話是在提示我?)我有點思路了,我可以把這 20 億個數存放在不同的文件,然后再來篩選。

面試題:可以具體說說嗎?

小秋:剛才你說,我的那個方法,最多只能記錄大概 2 億多條的不同記錄,那么我可以把這 20 億個數映射到不同的文件中去,例如,數值在 0 至 2億之間的存放在文件1中,數值在2億至4億之間的存放在文件2中....,由于 int 型整數大概有 42 億個不同的數,所以我可以把他們映射到 21 個文件中去,如圖

顯然,相同的數一定會在同一個文件中,我們這個時候就可以用我的那個方法,統計每個文件中出現次數最多的數,然后再從這些數中再次選出最多的數,就可以了。

面試官:嗯,這個方法確實不錯,不過,如果我給的這 20 億個數數值比較集中的話,例如都處于 1~20000000 之間,那么你都會把他們全部映射到同一個文件中,你有優化思路嗎?

小秋:那我可以先把每個數先做哈希函數映射,根據哈希函數得到的哈希值,再把他們存放到對應的文件中,如果哈希函數設計到好的話,那么這些數就會分布的比較平均。(關于哈希函數的設計,我就不說了,我這只是提供一種思路)

40億級別

面試官:那如果我把 20 億個數加到 40 億個數呢?

小秋:(這還不簡單,映射到42個文件唄)那我可以加大文件的數量啊。

面試官:那如果我給的這 40 億個數中數值都是一樣的,那么你的哈希表中,某個 key 的 value 存放的數值就會是 40 億,然而 int 的最大數值是 21 億左右,那么就會出現溢出,你該怎么辦?

小秋:(那我把 int 改為 long 不就得了,雖然會占用更多的內存,那我可以把文件分多幾份唄,不過,這應該不是面試官想要的答案),我可以把 value 初始值賦值為 負21億,這樣,如果 value 的數值是 21 億的話,就代表某個 key 出現了 42 億次了。

這里說明下,文件還是 21 個就夠了,因為 21 個文件就可以把每個文件的數值種類控制在 2億種了,也就是說,哈希表存放的記錄還是不會超過 2 億中。

80億級別

面試官:反應挺快哈,那我如果把 40 億增加到 80 億呢?

小秋:(我靠,這變本加厲?。?........我知道了,我可以一邊遍歷一遍判斷啊,如果我在統計的過程中,發現某個 key 出現的次數超過了 40 億次,那么,就不可能再有另外一個 key 出現的次數比它多了,那我直接把這個 key 返回就搞定了。

面試官:行,此次面試到此結束,回去等通知吧。

總結

今天這篇文章主要講了大數據處理相關的一些問題,后面可能還會給大家找一些類似,但處理方式不同的題勒,大家如果覺得不錯,不妨:

1、點贊,讓更多的人也能看到這篇內容(收藏不點贊,都是耍流氓 -_-)

2、關注我,讓我們成為長期關系

3、關注公眾號「苦逼的碼農」,主要寫算法、計算機基礎之類的文章,里面已有100多篇原創文章,我也分享了很多視頻、書籍的資源,以及開發工具,歡迎各位的關注,第一時間閱讀我的文章。。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/7872.html

相關文章

  • 常見大數據和空間面試

    摘要:答案使用,申請一個長度為類型的,每個位置只表示或,該數組占用空間約。遍歷億個數,當前數為,落在區間,對應。 過濾100億黑名單 題目 假設有100億個URL的黑名單,每個URL最多占用64B,設計一個過濾系統,判斷某條URL是否在黑名單里。 要求 不高于萬分之一的判斷失誤率;額外內存不超過30GB 答案 100億個64B的URL需要640GB的內存,顯然直接存哈希表不合理。考慮布隆過濾...

    Hydrogen 評論0 收藏0
  • 七面阿里:現在分享一下阿里最全面試116題:阿里天貓、螞蟻金服、阿里巴巴面試題含答案

    摘要:面試,是跳槽后第一個需要面對的問題而且不同公司面試的著重點不同但是卻有一個共同點基礎是必考的。對自動災難恢復有要求的表。 貌似這一點適應的行業最廣,但是我可以很肯定的說:當你從事Java一年后,重新找工作時,才會真實的感受到這句話。 工作第一年,往往是什么都充滿新鮮感,什么都學習,沖勁十足的一年;WEB行業知識更新特別快,今天一個框架的新版本,明天又是另一個新框架,有時往往根據項目的需...

    animabear 評論0 收藏0
  • 七面阿里:現在分享一下阿里最全面試116題:阿里天貓、螞蟻金服、阿里巴巴面試題含答案

    摘要:面試,是跳槽后第一個需要面對的問題而且不同公司面試的著重點不同但是卻有一個共同點基礎是必考的。對自動災難恢復有要求的表。 貌似這一點適應的行業最廣,但是我可以很肯定的說:當你從事Java一年后,重新找工作時,才會真實的感受到這句話。 工作第一年,往往是什么都充滿新鮮感,什么都學習,沖勁十足的一年;WEB行業知識更新特別快,今天一個框架的新版本,明天又是另一個新框架,有時往往根據項目的需...

    fjcgreat 評論0 收藏0

發表評論

0條評論

468122151

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<