我們知道堆有大根堆和小根堆兩種,那麼在解決找堆中k個最大值的問題時應該用大根堆還是小根堆呢?答案是找k個最大的,要建立k大小的小堆。思路如下:
比如下面這個陣列,要去取出其中最大的四個值,
然後將後面的值與堆頂值比較,若大於堆頂值則彈出堆頂,將新的值加入堆
重複這個步驟,堆中的值會整體增大,陣列遍歷完後,則堆中的元素為四個最大值。
有了思路,來看下面這個問題:給定兩個整形陣列num1和num2,定義一對值 (u,v),其中第乙個元素來自 num1,第二個元素來自 num2。找到和最小的 k 對數字
**如下
堆排序與topK問題
找出乙個有10億數字陣列中,前k個最大值 第一步 hash去重 解法1 劃分法 def partition l,left,right low left if left right key l left high right while low high while low high and l hi...
堆排序 TOPK問題 C
現在有n個數,設計演算法得到前k大的數。k 首先從原列表擷取前k個元素,組成乙個新列表。然後將這個新列表構建成乙個小根堆,那麼根就新列表中最小的數。接著繼續從原列表取出k以後的元素,和小根堆根比對,如果比根小,那麼肯定不屬於前k大的數,如果比根大,替換根,然後做一次向下調整,根重新變成新列表最小的數...
演算法基礎 二 topK問題 堆排序應用
package algorithm topk問題 例如,有1億個浮點數,如何找出其中最大的10000個?運用堆排序解決top k問題 top k問題就是在一堆資料中選擇前k大 前k小 的資料。做法有許多,可以先把所有資料排序,然後選前k個。然後用堆排序解決top k問題則不用先全部排序,只需維護乙個...