資料流中的中位數

2021-10-09 17:53:07 字數 1015 閱讀 8008

如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。我們使用insert()方法讀取資料流,使用getmedian()方法獲取當前讀取資料的中位數。

時間複雜度o(n),資料流插入的時候保證有序

class solution 

int len = stream.size();

for(int i = 0;inum)

}stream.push_back(num);

}double getmedian()

else

return result;

}};

時間複雜度o(log2n),思路:中位數左邊的最大值,右邊的最小值

class solution {

public:

//降序佇列,大頂堆

priority_queue ,less>maxheap;

//公升序佇列,小頂堆

priority_queue ,greater>minheap;

void insert(int num)

{//num放入堆中

if(maxheap.empty() || num(1)普通的佇列是一種先進先出的資料結構,元素在佇列尾追加,而從佇列頭刪除。

(2)在優先佇列中,元素被賦予優先順序。當訪問元素時,具有最高優先順序的元素最先刪除。

//公升序佇列,小頂堆

priority_queue ,greater> q;

//降序佇列,大頂堆

priority_queue ,less>q;

//greater和less是std實現的兩個仿函式(就是使乙個類的使用看上去像乙個函式。其實現就是類中實現乙個operator(),這個類就有了類似函式的行為,就是乙個仿函式類了)

資料流中的中位數

資料流中的中位數 如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。解題思路 維護乙個大堆和乙個小堆,大堆表示序列前一半數,小堆表示序列後一半數,保持兩個堆的元素個...

資料流中的中位數

如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。class solution double getmedian else private vectordata c...

資料流中的中位數

如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。簡單題 找中位數 coding utf 8 class solution x def insert self,nu...