摘要:
在看百度2013校园招聘笔试题,发现以下这道题有一定的思考价值。题目:有20个数组,每个数组有500个元素,并且是有序排列好的,现在在这20*500个数中找出排名前500的数。这道题一看就知道是个TopK的问题。解决这个问题思路如下:数组是有序的(假设是升序),我们要利用这个特性。首先构造一个大根堆(大小为数组个数即20),将每个数组当前最大的数放入堆中,然后取出大根堆的根,使用一个统计数组(大小为每个数组的长度即500)保存这个数,将这个数从大根堆中删除,接着再向大根堆中放入刚才删除的那个数的上一个数(数组是有序的),如此反复直到统计数组满了为止。#include #include#incl 阅读全文