資料流中的中位數

2022-09-10 12:15:16 字數 753 閱讀 9725

資料的數量不定,也就是陣列的長度不定,可以向陣列中插入數字,能夠o(1)得到中位數

我們知道使用堆或者快排思想可以得到無需陣列中的中位數

如何o(1)得到中位數呢?

使用有序陣列,每次插入維持乙個有序陣列o(n)的時間複雜度

如果能夠每次拿到中位數就好了,不需要有序

因此可以使用堆

奇數長度,中位數直接是 sz/2

如果是偶數長度 則取 sz/2-1,sz/2

可以使用兩個堆來分別存這些數

class

medianfinder

void

addnum

(int num)

min.

push_back

(num)

;push_heap

(min.

begin()

,min.

end(

),greater<

int>()

);//小頂堆

}else

//奇數

max.

push_back

(num)

;push_heap

(max.

begin()

,max.

end(

),less<

int>()

);}}

double

findmedian()

else

}

資料流中的中位數

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

資料流中的中位數

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

資料流中的中位數

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