堆排序的應用-TOPK問題

我們知道堆有大根堆和小根堆兩種,那麼在解決找堆中K個最大值的問題時應該用大根堆還是小根堆呢?答案是找K個最大的,要建立K大小的小堆。思路如下:

比如下面這個數組,要去取出其中最大的四個值,在這裏插入圖片描述需要先將數組的前四個做成一個小根堆,在這裏插入圖片描述
然後將後面的值與堆頂值比較,若大於堆頂值則彈出堆頂,將新的值加入堆
在這裏插入圖片描述
重複這個步驟,堆中的值會整體增大,數組遍歷完後,則堆中的元素爲四個最大值。
有了思路,來看下面這個問題:給定兩個整形數組num1和num2,定義一對值 (u,v),其中第一個元素來自 num1,第二個元素來自 num2。找到和最小的 k 對數字
代碼如下
在這裏插入圖片描述

相關文章
相關標籤/搜索