输入一个数组,求最小的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个数的主要内容,如果未能解决你的问题,请参考以下文章