資料的數量不定,也就是陣列的長度不定,可以向陣列中插入數字,能夠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...