2020-07-03:有1億個數字,其中有2個是重復的,快速找到它,時間和空間要最優


福哥答案2020-07-03:

1.雙重遍歷。
時間復雜度是O(N^2)。

2.排序。
采用外部排序。時間復雜度是O(NlogN)。

3.遍歷加哈希存儲。
空間換時間,時間復雜度是O(N),空間復雜度是O(N)。這種方法適用於小數據量,在這里用明顯不合適。

4.布隆過濾器。
根據公式計算,萬分之一的失誤率需要228M內存。個人感覺這種方法不太合適。

5.壓縮位圖。
根據我目前的分析,壓縮位圖適合稀疏存儲,在這里用,效果不明顯。32位整數總共有42億個,這道題有1億個數字,1/42算不算稀疏,就不得而知了。時間有限,沒測試。

6.哈希分組。
這1億個數字整數范圍不限。
一個分組里有兩個參數,一個參數保存數據,另一個參數保存個數DataCount。重復的數字一定在同一個分組中,然后對每一個分組進行遍歷加哈希存儲。如果DataCount過大,再次哈希分組。

7.位圖。
32位整數范圍,占用內存4G/8=512M。
最大值和最小值范圍,占用內存 (max-min)/8+1,最小占用內存 1億/8=不到12M。

結論:方法6和方法7都行。方法6適用的范圍廣,浮點數也行。方法7只適用於32位整數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM