前言:今天早上来实验室,同桌问了我一个问题:找出一个数组里面前K个最大数的高效算法。最近正好在看数据结构和算法相关内容,便以己之力帮她思考了思考。
问题:找出一个数组里面前K个最大数。
解法:
1.第一感觉就是对数组进行降序全排序,然后返回前K个元素,即是需要的K个最大数。
排序算法的选择有很多,考虑数组的无序性,可以考虑选择快速排序算法,其平均时间复杂度为O(NLogN)。具体代码实现可以参见相关数据结构与算法书籍。
2.观察第一种算法,问题只需要找出一个数组里面前K个最大数,而第一种算法对数组进行全排序,不单单找出了前K个最大数,更找出了前N(N为数组大小)
个最大数,显然该算法存在“冗余”,因此基于这样一个原因,提出了改进