堆排序的应用-TOPK问题

我们知道堆有大根堆和小根堆两种,那么在解决找堆中K个最大值的问题时应该用大根堆还是小根堆呢?答案是找K个最大的,要建立K大小的小堆。思路如下:

比如下面这个数组,要去取出其中最大的四个值,堆排序的应用-TOPK问题需要先将数组的前四个做成一个小根堆,堆排序的应用-TOPK问题
然后将后面的值与堆顶值比较,若大于堆顶值则弹出堆顶,将新的值加入堆
堆排序的应用-TOPK问题
重复这个步骤,堆中的值会整体增大,数组遍历完后,则堆中的元素为四个最大值。
有了思路,来看下面这个问题:给定两个整形数组num1和num2,定义一对值 (u,v),其中第一个元素来自 num1,第二个元素来自 num2。找到和最小的 k 对数字
代码如下
堆排序的应用-TOPK问题