国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

算法通關(guān)村第十五關(guān)——從10億數(shù)字中尋找最小的100萬個(gè)數(shù)字

這篇具有很好參考價(jià)值的文章主要介紹了算法通關(guān)村第十五關(guān)——從10億數(shù)字中尋找最小的100萬個(gè)數(shù)字。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

題目要求:設(shè)計(jì)一個(gè)算法,給定一個(gè)10億個(gè)數(shù)字,找出最小的100萬的數(shù)字。假定計(jì)算機(jī)內(nèi)存足以容納全部10億個(gè)數(shù)字。

本題有三種常用的方法,一種是先排序所有元素,然后取出前100萬個(gè)數(shù),該方法的時(shí)間復(fù)雜度為O(nlogn)。很明顯對于10億級別的數(shù)據(jù),這么做時(shí)間和空間代價(jià)太高。

第二種方式是采用選擇排序的方式,首先遍歷10億個(gè)數(shù)字找最小,然后再遍歷一次找第二小,然后再一次找第三小,直到找到第100萬個(gè)。很明顯這種方式的時(shí)間代價(jià)是0()也就是要執(zhí)行10億 * 100萬次,這個(gè)效率一般的服務(wù)器都達(dá)不到。

第三種方式,采用大頂堆來解決,堆的原理在《查找》一章專門介紹過,方法思想是一致的,都是“查小用大堆,查大用小堆”。

首先,為前100萬個(gè)數(shù)字創(chuàng)建一個(gè)大頂堆,最大元素位于堆頂。

然后,遍歷整個(gè)序列,只有比堆頂元素小的才允許插入堆中,并刪除原堆的最大元素。

之后繼續(xù)遍歷剩下的數(shù)字,最后剩下的就是最小的100萬個(gè)。

采用這種方式,只需要遍歷一次10億個(gè)數(shù)字,還可以接受。更新堆的代價(jià)是0(logn),也勉強(qiáng)能夠接受。堆占用的空間是100萬*4,大約為4MB左右的空間就夠了,因此也能接收。

如果數(shù)據(jù)量沒有這么大,也是可以直接使用這三種方式的。

如果將10億數(shù)字換成流數(shù)據(jù),也可以使用堆來找,而且對于流數(shù)據(jù),幾乎只能用堆來做。文章來源地址http://www.zghlxwxcb.cn/news/detail-676015.html

到了這里,關(guān)于算法通關(guān)村第十五關(guān)——從10億數(shù)字中尋找最小的100萬個(gè)數(shù)字的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 算法通關(guān)村第十九關(guān)——最小路徑和

    算法通關(guān)村第十九關(guān)——最小路徑和

    LeetCode64. 給定一個(gè)包含非負(fù)整數(shù)的 m × n 網(wǎng)格 grid,請找出一條從左上角到右下角的路徑,使得路徑上的數(shù)字總和為最小。 輸入:grid=[[1,3,1],[1,5,1],[4,2,1]] 輸出:7 解釋:因?yàn)槁窂?→3→1→1→1的總和最小。 對于每一塊方塊來說,只能從他的上邊或者左邊走過來,所以在for循環(huán)中

    2024年02月09日
    瀏覽(22)
  • [Go版]算法通關(guān)村第十三關(guān)黃金——數(shù)字?jǐn)?shù)學(xué)問題之?dāng)?shù)論問題(最大公約數(shù)、素?cái)?shù)、埃氏篩、丑數(shù))

    [Go版]算法通關(guān)村第十三關(guān)黃金——數(shù)字?jǐn)?shù)學(xué)問題之?dāng)?shù)論問題(最大公約數(shù)、素?cái)?shù)、埃氏篩、丑數(shù))

    題目鏈接:LeetCode-1979. 找出數(shù)組的最大公約數(shù) 輾轉(zhuǎn)相除法其核心部分為:若r 是a ÷ b的余數(shù),則 gcd(a, b)=gcd(b, r) 題目鏈接:LeetCode-204. 計(jì)數(shù)質(zhì)數(shù) 如果 x 是質(zhì)數(shù),那么大于 x 的 x 的倍數(shù) 2x,3x,… 一定不是質(zhì)數(shù)。 時(shí)間復(fù)雜度分析: 外層循環(huán)的迭代次數(shù)是 n-2,即 O ( n ) O(n) O ( n ) 次

    2024年02月11日
    瀏覽(24)
  • 算法通關(guān)村第11關(guān)【黃金】| 用4KB內(nèi)存尋找重復(fù)元素

    題目要求:給定一個(gè)數(shù)組,包含從1到N的整數(shù),N最大為32000,數(shù)組可能還有重復(fù)值,且N的取值不定,若只有4KB的內(nèi)存可用,該如何打印數(shù)組中所有重復(fù)元素。 思路: 直接用大小為32000的int數(shù)組來標(biāo)記對應(yīng)下標(biāo)下的值出現(xiàn)次數(shù),但是空間大小是32000*4B超過了4KB 這里采用一種壓縮

    2024年02月09日
    瀏覽(27)
  • 算法通關(guān)村第一關(guān)------鏈表經(jīng)典問題之尋找第一個(gè)公共子結(jié)點(diǎn)

    算法通關(guān)村第一關(guān)------鏈表經(jīng)典問題之尋找第一個(gè)公共子結(jié)點(diǎn)

    哈希和集合 棧 拼接兩個(gè)字符串 同步相消 1、哈希和集合法: ????????將一個(gè)鏈表存入Map(或者集合)中,然后遍歷第二個(gè)鏈表,在遍歷的同時(shí),檢查在Hash(或者集合)中是否包含此節(jié)點(diǎn)。 ?2、棧方法: ? ? ? ? 主要思想:棧是后進(jìn)先出原則,stack.peek()方法每次比較棧頂

    2024年02月12日
    瀏覽(27)
  • 算法通關(guān)村第一關(guān)——鏈表經(jīng)典問題之尋找兩個(gè)鏈表的第一個(gè)公共結(jié)點(diǎn)

    算法通關(guān)村第一關(guān)——鏈表經(jīng)典問題之尋找兩個(gè)鏈表的第一個(gè)公共結(jié)點(diǎn)

    這是一道經(jīng)典的鏈表問題,來自劍指offer52,題目是這樣的:輸入兩個(gè)鏈表,找出它們的第一個(gè)公共結(jié)點(diǎn),如下圖所示: 兩個(gè)鏈表的頭結(jié)點(diǎn)均已知,相交之后成為一個(gè)單鏈表,但是相交的位置未知,并且相交之前的結(jié)點(diǎn)數(shù)也是未知的,請?jiān)O(shè)計(jì)算法找到兩個(gè)鏈表的合并點(diǎn)。 第一

    2024年02月16日
    瀏覽(20)
  • 算法通關(guān)村第十八關(guān)——排列問題

    LeetCode46.給定一個(gè)沒有重復(fù)數(shù)字的序列,返回其所有可能的全排列。例如: 輸入:[1,2,3] 輸出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 元素1在[1,2]中已經(jīng)使用過了,但是在[2,1]中還要再使用一次,所以就不能使用startlndex了,為此可以使用一個(gè)used數(shù)組來標(biāo)記已經(jīng)選擇的元

    2024年02月09日
    瀏覽(22)
  • 算法通關(guān)村第十七關(guān)——跳躍游戲

    leetCode55 給定一個(gè)非負(fù)整數(shù)數(shù)組,你最初位于數(shù)組的第一個(gè)位置。數(shù)組中的每個(gè)元素代表你在該位置可以跳躍的最大長度,判斷你是否能夠到達(dá)最后一個(gè)位置。 示例1: 輸入:[2,3,1,1,4] 輸出:true 解釋:從位置 0 到 1 跳 1 步,然后跳 3 步到達(dá)最后一個(gè)位置。 示例2: 輸入:[3

    2024年02月10日
    瀏覽(20)
  • 算法通關(guān)村第十二關(guān)-字符串基礎(chǔ)題目

    思路:遍歷字符串,將第i個(gè)字符和第N-i-1個(gè)字符串交換即可; 代碼實(shí)現(xiàn): 題目:反轉(zhuǎn)字符串2 思路:每2k個(gè)一組,將其前k個(gè)字符反轉(zhuǎn),使用i+k與字符串長度n判斷剩余字符串長度屬于(0,k)還是 [k,2k)之間;然后按照要求剩余字符串即可; 代碼實(shí)現(xiàn): 題目:僅僅反轉(zhuǎn)字母 思

    2024年01月22日
    瀏覽(21)
  • 算法通關(guān)村第十七關(guān):青銅挑戰(zhàn)-貪心其實(shí)很簡單

    算法通關(guān)村第十七關(guān):青銅挑戰(zhàn)-貪心其實(shí)很簡單

    1. 難以解釋的貪心算法 貪心學(xué)習(xí)法則:直接做題,不考慮貪不貪心 貪心(貪婪)算法 是指在問題盡心求解時(shí),在每一步選擇中都采取最好或者最優(yōu)(最有利)的選擇,從而希望能夠?qū)е陆Y(jié)果最好或者最優(yōu)的算法 貪心算法所得到的結(jié)果不一定是最優(yōu)的結(jié)果,但是都是相對近似最

    2024年02月09日
    瀏覽(28)
  • 算法通關(guān)村第十六關(guān)——滑動窗口與堆結(jié)合

    LeetCode239給你一個(gè)整數(shù)數(shù)組nums,有一個(gè)大小為k的滑動窗口從數(shù)組的最左側(cè)移動到數(shù)組的最右側(cè)。你只可以看到在滑動窗口內(nèi)的k個(gè)數(shù)字?;瑒哟翱诿看沃幌蛴乙苿右晃?,返回滑動窗口中的最大值。 優(yōu)先隊(duì)列中每個(gè)值存儲的是一個(gè)包含元素值和對應(yīng)索引的數(shù)組 [元素值, 索引] 。在

    2024年02月11日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包