對於大量整數 求重複 查詢值 的問題總結

2022-08-29 11:39:12 字數 725 閱讀 6888

問題出自:

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

方案1:採用2-bitmap(每個數分配2bit,00表示不存在,01表示出現一次,10表示多次,11無意義)進行,共需記憶體2^32 * 2 bit=1 gb記憶體,還可以接受。然後掃瞄這2.5億個整數,檢視bitmap中相對應位,如果是00變01,01變10,10保持不變。所描完事後,檢視bitmap,把對應位是01的整數輸出即可。

總結:這道題的解法中隱含了乙個假設即這2.5億個整數中最大的整數為2^32 -1,最小的為0(或者說最大的為2^32

,最小為1,總之取值範圍是2^32 個

)所以才有共需記憶體2^32 * 2 bit=1 gb記憶體之說。

還是使用類似的方法位圖法:

使用位圖法判斷整形陣列是否存在重複 

判斷集合中存在重複是常見程式設計任務之一,當集合中資料量比較大時我們通常希望少進行幾次掃瞄,這時雙重迴圈法就不可取了。

位圖法比較適合於這種情況,它的做法是按照集合中最大元素max建立乙個長度為max+1的新陣列,然後再次掃瞄原陣列,遇到幾就給新陣列的第幾位置上1,如遇到5就給新陣列的第六個元素置1,這樣下次再遇到5想置位時發現新陣列的第六個元素已經是1了,這說明這次的資料肯定和以前的資料存在著重複。這種給新陣列初始化時置零其後置一的做法類似於位圖的處理方法故稱位圖法。它的運算次數最壞的情況為2n。如果已知陣列的最大值即能事先給新陣列定長的話效率還能提高一倍。

大量資料查重

本來到軟工所是為了做作業和看書的,結果,很不務正業的被乙個問題吸引了,這個任務是 從檔案中讀入一系列格式化好的資料,如 int int int int float float 90900 1442373573 1486014884 0 0.0125 0.0949473 90900 144237357...

大量URL去重

size medium 問題 i 有大量的字串格式的url,如何從中去除重複的,優化時間空間複雜度 i 我的思路,1.將url存入hash鍊錶,b 每個url讀入到hash鍊錶中 b 遇到重複的就捨棄,否則加入到鍊錶裡面,最後遍歷得到所有不重複的url。空間複雜度m,時間複雜度為o n n m m為...

42 整數去重

總時間限制 1000ms 記憶體限制 65536kb 描述 給定含有n個整數的序列,要求對這個序列進行去重操作。所謂去重,是指對這個序列中每個重複出現的數,只保留該數第一次出現的位置,刪除其餘位置。輸入 輸入包含兩行 第一行包含乙個正整數n 1 n 20000 表示第二行序列中數字的個數 第二行包含...