福哥答案2020-07-03:測試
1.雙重遍歷。 時間複雜度是O(N^2)。url
2.排序。 採用外部排序。時間複雜度是O(NlogN)。.net
3.遍歷加哈希存儲。 空間換時間,時間複雜度是O(N),空間複雜度是O(N)。這種方法適用於小數據量,在這裏用明顯不合適。blog
4.布隆過濾器。 根據公式計算,萬分之一的失誤率須要228M內存。我的感受這種方法不太合適。排序
5.壓縮位圖。 根據我目前的分析,壓縮位圖適合稀疏存儲,在這裏用,效果不明顯。32位整數總共有42億個,這道題有1億個數字,1/42算不算稀疏,就不得而知了。時間有限,沒測試。內存
6.哈希分組。 這1億個數字整數範圍不限。 一個分組裏有兩個參數,一個參數保存數據,另外一個參數保存個數DataCount。重複的數字必定在同一個分組中,而後對每個分組進行遍歷加哈希存儲。若是DataCount過大,再次哈希分組。get
7.位圖。 32位整數範圍,佔用內存4G/8=512M。 最大值和最小值範圍,佔用內存 (max-min)/8+1,最小佔用內存 1億/8=不到12M。io
結論:方法6和方法7都行。方法6適用的範圍廣,浮點數也行。方法7只適用於32位整數。class
評論遍歷