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

本文介绍了如何高效地找出一个数组中前K个最大数的方法,包括全排序、改进算法和O(N)时间复杂度的算法。讨论了不同算法的时间复杂度,如快速排序和中值划分策略,并指出在小规模问题中,简单排序可能更为适用。
最低0.47元/天 解锁文章
1634

被折叠的 条评论
为什么被折叠?



