C++版 - 剑指offer 面试题30:最小的K个数(topK问题) 题解

剑指offer 面试题30:最小的K个数


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

提交网址: http://www.nowcoder.com/practice/6a296eb82cf844ca8539b57c23e6e9bf?tpId=13&tqId=11182


分析:

想到3种方法,第1种是先快排,然后挑出其中的前k个,时间复杂度为O(n logn);第2种方法是使用partition函数(进行一次快速排序用哨兵数分割数组中的数据),时间复杂度:O(n);第3种是小顶堆(优先队列),时间复杂度:O(n logk). 第3种在海量计算中应用广泛...

STL中的优先队列默认是大顶堆,此题是生成一个小顶堆,即可解决...

你可能感兴趣的:(剑指offer解题报告,数据结构与算法的C++实现)