careercup-高等难度 18.6
生活随笔
收集整理的這篇文章主要介紹了
careercup-高等难度 18.6
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
18.6 設計一個算法,給定10億個數字,找出最小的100萬個數字。假定計算機內存足以容納全部10億個數字。
解法:
方法1:排序
按升序排序所有的元素,然后取出前100萬個數,時間復雜度為O(nlog(n))
方法2:大頂堆
我們可以使用大頂堆來解題。首先,為前100萬個數字創建一個大頂堆
然后,遍歷整個數列,將每個元素插入大頂堆,并刪除最大的元素。
遍歷結束后,我們將得到一個堆,剛好包含最小的100萬個數字。這個算法的時間復雜度為O(nlog(m)),其中m為待查找數值的數量。
方法3:選擇排序算法(假如你可以改變原始數組)
在計算機科學中,選擇排序是個很有名的算法,可以在線性時間內找到數組中第i個最小(或最大)元素。
如果這些元素各不相同,則可以在預期的O(n)時間內找到第i個最小的元素。
?
轉載于:https://www.cnblogs.com/wuchanming/p/4362389.html
總結
以上是生活随笔為你收集整理的careercup-高等难度 18.6的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql用 fifo 记录日志_MyS
- 下一篇: sql-bench mysql_MySQ