一、在N个数中,寻找最大的K个数
这里只考虑K不等于1的情况,K = 1时,可以通过N - 1次比较和交换得到结果。
1. N不大的情况下,几千个左右。
① 先排序,快速排序或者堆排序,平均复杂度为O(N*log2N),再取出前K个,O(K)。总时间复杂度,O(N*log2N) + O(K) =O(N*log2N) ;
② 若K <= log2N,可以进行部分排序(选择排序和冒泡排序)。把N个数中的前K个数排序出来,复杂度是O(N*K);
③ 寻找N个数中最大的K个数,本质上就是寻找最大的K个数中最小的那个,也就是第K

本文总结了在不同规模数据下寻找最大的K个数和第K大的数的方法。对于小规模数据,可以采用排序、部分排序或直接遍历。对于大规模数据,利用数组、小顶堆或二分策略。此外,还讨论了寻找第K到M大的数的解决方案,包括先找出第K和第M大数,再进行扫描。

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



