如何在大量的資料中找出不重複的整數

2022-08-12 06:21:10 字數 695 閱讀 1623

在 2.5 億個整數中找出不重複的整數。注意:記憶體不足以容納這 2.5 億個整數。

由於這道題目與前面的題目類似,也是無法一次性把所有資料載入到記憶體中,因此也可以採用類似的方法求解。

方法一:分治法

採用 hash 函式的方法,把這 2.5 億個整數劃分到更小的檔案中,從而保證每個檔案的大小不超過可用的記憶體大小。然後對每個小檔案而言,所有的資料都可以一次性被載入到記憶體中,因此可以使用 hash_map 或 hash_set 來找到每個小檔案中不重複的整數。當處理完所有的檔案後就可以找出這 2.5 億個整數中所有的不重複的整數。

方法二:位圖法

對於整數相關的演算法的求解,位圖法是一種非常實用的演算法。對本題而言,如果可用的記憶體空間超過 1gb 就可以使用這種方法。具體思路:假設整數占用 4b(如果占用 8b,則求解思路類似,只不過需要占用更大的記憶體),也就是 32bit,可以表示的整數的個數為 232。由於本題只查詢不重複的數,而不關心具體數字出現的次數,因此可以分別使用 2 個 bit 來表示各個數字的狀態:用 00 表示這個數字沒有出現過,01 表示出現過 1 次,10 表示出現了多次, 11 暫不使用。

根據上面的邏輯,在遍歷這 2.5 億個整數時,如果這個整數對應的點陣圖中的位為 00,那麼就修改成 01;如果為 01,則修改為 10;如果為 10,則保持原值不變。這樣當所有資料遍歷完成後,可以再遍歷一遍位圖,點陣圖中值為 01 的 bit 對應的數字就是沒有重複的數字。

如何在大量的資料中找出不重複的整數?

在 2.5 億個整數中找出不重複的整數。注意 記憶體不足以容納這 2.5 億個整數。方法一 分治法 與前面的題目方法類似,先將 2.5 億個數劃分到多個小檔案,用 hashset hashmap 找出每個小檔案中不重複的整數,再合併每個子結果,即為最終結果。方法二 位圖法 位圖,就是用乙個或多個 b...

如何在大量的資料中找出不重複的整數?

在 2.5 億個整數中找出不重複的整數。注意 記憶體不足以容納這 2.5 億個整數。方法一 分治法 與前面的題目方法類似,先將 2.5 億個數劃分到多個小檔案,用 hashset hashmap 找出每個小檔案中不重複的整數,再合併每個子結果,即為最終結果。方法二 位圖法 位圖,就是用乙個或多個 b...

php 找出資料中的不重複值

直接 展示 找出陣列中的不重複值 param array arr 一維陣列 param boolean falg 是否嚴格驗證 return array 返回不重複的值 function find arr unrepeat arr,falg false return data 找出特定值在陣列中的出...