如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。
解法1:陣列不排序,基於partition函式找中位數。插入數字和找出中位數的時間複雜度分別為o(1)和o(n)
1class
solution
13 arr[begin]=tmp;
14return
begin;15}
16void insert(int
num)
1720
double
getmedian()
2135
return arr[length/2
];36 }else
46 begin=0
;47 end=length/2-1;48
while(true
)//確定length/2-1位置上的數
4954
return (arr[length/2-1]+arr[length/2])*1.0/2;55
}56}57
private
:58 vectorarr;
59 };
解法2:陣列插入元素後保持排序,故插入數字和找出中位數的時間複雜度分別為o(n)和o(1)
1class
solution
12 arr[idx+1]=num;//插入13}
14double
getmedian()
15else23}
24private
:25 vectorarr;
26 };
解法3:用乙個大頂堆實現陣列左邊的資料容器,用乙個小頂堆實現陣列右邊的資料容器。插入數字和找出中位數的時間複雜度分別為o(logn)和o(1)
1class
solution
15max.push_back(num);
16 push_heap(max.begin(), max.end(), std::less());
17 }else
26min.push_back(num);
27 push_heap(min.begin(), min.end(), std::greater());28}
29}30double
getmedian()
31else39}
40private
:41 vectormax;
42 vectormin;
43 };
資料流中的中位數
資料流中的中位數 如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。解題思路 維護乙個大堆和乙個小堆,大堆表示序列前一半數,小堆表示序列後一半數,保持兩個堆的元素個...
資料流中的中位數
如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。class solution double getmedian else private vectordata c...
資料流中的中位數
如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。簡單題 找中位數 coding utf 8 class solution x def insert self,nu...