資料流中的中位數

2021-08-28 06:11:11 字數 1336 閱讀 8662

題目:如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。

#include#include#include#include using namespace std;

//通過建立乙個最大堆和最小堆的模板

templateclass dynamicarray

min.push_back(num);

push_heap(min.begin(), min.end(), greater());

} else

max.push_back(num);

push_heap(max.begin(), max.end(), greater());

} }//得到中位數,當堆中資料為偶數時,返回最大堆最大的數加上最小堆最小的數的和的一半;

//否則返回最小堆的最小的數

t getmedian()

private:

//max為最大堆,min為最小堆

vectormin;

vectormax;

};//測試**

void test(const char* testname, dynamicarray& numbers, double expected)

int main(int argc, char* argv)

catch (const exception&)

numbers.insert(5);

test("test2", numbers, 5);

numbers.insert(2);

test("test3", numbers, 3.5);

numbers.insert(3);

test("test4", numbers, 3);

numbers.insert(4);

test("test6", numbers, 3.5);

numbers.insert(1);

test("test5", numbers, 3);

numbers.insert(6);

test("test7", numbers, 3.5);

numbers.insert(7);

test("test8", numbers, 4);

numbers.insert(0);

test("test9", numbers, 3.5);

numbers.insert(8);

test("test10", numbers, 4);

return 0;

}

資料流中的中位數

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

資料流中的中位數

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

資料流中的中位數

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