牛客網 劍指office 資料流中的中位數

2021-09-24 13:59:57 字數 718 閱讀 3689

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

**思路:**首先要理解stl中heap(堆)的用法。參考

建立兩個堆,最大堆和最小堆。兩個堆中資料的長度之差不能超過一。最大堆中堆頂的資料為最大堆中最大的數字,最小堆中堆頂的數字為最小堆中的最小的數字。並且要保證最大堆中的數字不大於最小堆中的數字。插入乙個數字的時候,如果兩個堆的長度相等,那麼插入最小堆中。在插入前首先要比較 插入的數字num是否大於最大堆 中堆頂的數字max_heap[0],如果num 0 && num < max_heap[0])

min_heap.push_back(num);

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

} else

max_heap.push_back(num);

push_heap(max_heap.begin(), max_heap.end(), less());

} }double getmedian()

private:

vectormin_heap;

vectormax_heap;

};

牛客網 劍指office 陣列中的逆序對

題目 在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數p。並將p對1000000007取模的結果輸出。即輸出p 1000000007 思路 歸併排序。先將陣列分為若干個長度相等的子陣列,然後在合併子陣列的時候進行排序 並統計逆...

資料流中的中位數 牛客網

題意理解 求不斷增加數字的陣列中中位數的變化。問題分析 用堆。乙個小頂堆儲存上半部分,乙個大頂堆儲存下半部分 沒插入乙個元素,根據當前元素和堆頂元素的比較選擇乙個堆存放,然後根據兩個堆的數量調整兩邊元素,保證上半部分比下半部分大1.其他插入o lgn 查詢o 1 鏈結priority queue,l...

牛客網 劍指office 求1 2 2 n

題目 求1 2 3 n,要求不能使用乘除法 for while if else switch case等關鍵字及條件判斷語句 a?b c 解法一 思路 遞迴求和。class solution 解法二 思路 利用建構函式求解。我們先定義乙個類,接著建立n個該型別的例項,那麼這個建構函式將會被呼叫n次,...