topk问题:求最小或最大的k个数,求第k大或第k小的数
最近做了道算法题,题目大概意思如下:输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。题目看起来不难,但是想要比较用比较高效的算法对于我这种新手来说还是比较困难的。1.我最开始想到的是用做k轮选择排序(其实就是求k次最小值),因为选择排序有个特点就是每次都会,确定一个最小值,这样我们的时间复杂度就位 o(n * k)。2.其次我有想到直接使用快速排序,在取前k个数,这样复杂度为o(nlogn)对比了一下1,2,