careercup-高等难度 18.6
18.6 設(shè)計(jì)一個(gè)算法,給定10億個(gè)數(shù)字,找出最小的100萬個(gè)數(shù)字。假定計(jì)算機(jī)內(nèi)存足以容納全部10億個(gè)數(shù)字。
解法:
方法1:排序
按升序排序所有的元素,然后取出前100萬個(gè)數(shù),時(shí)間復(fù)雜度為O(nlog(n))
方法2:大頂堆
我們可以使用大頂堆來解題。首先,為前100萬個(gè)數(shù)字創(chuàng)建一個(gè)大頂堆
然后,遍歷整個(gè)數(shù)列,將每個(gè)元素插入大頂堆,并刪除最大的元素。
遍歷結(jié)束后,我們將得到一個(gè)堆,剛好包含最小的100萬個(gè)數(shù)字。這個(gè)算法的時(shí)間復(fù)雜度為O(nlog(m)),其中m為待查找數(shù)值的數(shù)量。
方法3:選擇排序算法(假如你可以改變?cè)紨?shù)組)
在計(jì)算機(jī)科學(xué)中,選擇排序是個(gè)很有名的算法,可以在線性時(shí)間內(nèi)找到數(shù)組中第i個(gè)最小(或最大)元素。
如果這些元素各不相同,則可以在預(yù)期的O(n)時(shí)間內(nèi)找到第i個(gè)最小的元素。
?
轉(zhuǎn)載于:https://www.cnblogs.com/wuchanming/p/4362389.html
總結(jié)
以上是生活随笔為你收集整理的careercup-高等难度 18.6的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql用 fifo 记录日志_MyS
- 下一篇: 字下挂星星的字体_星星掉了字体下载|星星