第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

存儲數(shù)字流中最大的5000個數(shù)字

存儲數(shù)字流中最大的5000個數(shù)字

當(dāng)年話下 2019-11-18 18:37:16
鑒于以下問題:“存儲數(shù)字流中最大的5000個數(shù)字”想到的解決方案是一個二叉搜索樹,該樹維護(hù)該樹中節(jié)點數(shù)的計數(shù),并在計數(shù)達(dá)到5000時引用最小節(jié)點。當(dāng)計數(shù)達(dá)到5000時,可以將要添加的每個新數(shù)字進(jìn)行比較。樹上最小的項目。如果更大,則可以添加新的數(shù)字,然后刪除最小的數(shù)字,并計算出新的最小數(shù)字(這很簡單,因為已經(jīng)具有先前的最小數(shù)字)。我對此解決方案的擔(dān)心是,二叉樹自然會偏斜(因為我只是在一側(cè)刪除)。有沒有一種方法可以解決這個問題,而又不會造成嚴(yán)重歪斜的樹?如果有人需要,到目前為止,我為我的解決方案提供了偽代碼:process(number){  if (count == 5000 && number > smallest.Value)  {    addNode( root, number)    smallest = deleteNodeAndGetNewSmallest ( root, smallest)  }}deleteNodeAndGetNewSmallest( lastSmallest){  if ( lastSmallest has parent)  {    if ( lastSmallest has right child)    {      smallest = getMin(lastSmallest.right)      lastSmallest.parent.right = lastSmallest.right    }    else    {      smallest = lastSmallest.parent    }  }  else   {    smallest = getMin(lastSmallest.right)    root = lastSmallest.right  }  count--  return smallest}getMin( node){  if (node has left)    return getMin(node.left)  else    return node}add(number){  //standard implementation of add for BST  count++}
查看完整描述

3 回答

?
慕容森

TA貢獻(xiàn)1853條經(jīng)驗 獲得超18個贊

您可以使用選擇算法查找前k個元素,但通過存儲2k個元素的數(shù)組僅使用O(k)內(nèi)存。每次填充數(shù)組時,請使用選擇算法刪除最低的k。不管k的值如何,這都會花費O(n)時間,因為您正在執(zhí)行O(n / k)選擇算法,每個算法都花費時間O(k)。它還僅使用O(k)內(nèi)存。

查看完整回答
反對 回復(fù) 2019-11-18
  • 3 回答
  • 0 關(guān)注
  • 563 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號