堆排序的应用-TOPK问题

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

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