输入一个数组,求最小的K个数

Posted 救赎之道就在其中

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了输入一个数组,求最小的K个数相关的知识,希望对你有一定的参考价值。

被这道题困了好久,看了剑指Offer才知道OJ上的要求有点迷惑性。

题目:

输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。

 

一直以为要按照顺序输出,想的方法是插入排序算法复杂度是O(N*K),当然这个地方就显得自己有点蠢了。不过我想在“按序输出”的错误题意下还没有啥更好的方法。

然后看了剑指Offer原书,原来输出不必按照顺序。所以第一种方法是快速选择。这种方法算法复杂度是O(N)。不过在实际的使用中可能有点隐含的时间参数。

第二种方法是维护一个大小为K的最大堆(或者红黑树,二叉树)。这个数据结构里面放了最小的K个数,每次把新加入的数字和其中最大的比较,如果小于最大的就插入,否则跳过。算法复杂度O(N*logK)。不过这个地方维护一个这样的数据结构其实还是有点困难的。面试的时候自己写代码不太容易。

以上是关于输入一个数组,求最小的K个数的主要内容,如果未能解决你的问题,请参考以下文章

求数组中最小的k个数

求数组中最小的k个数

算法-求两个有序数组两两相加的值最小的K个数

求最小的k个数

最小的k个数

最小的k个数