最小的k个数
Medium; heap; array; sorting;
Last updated
Medium; heap; array; sorting;
Last updated
给定一个数组,找出其中最小的K个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。如果K>数组的长度,那么返回一个空的数组示例1
复制
复制
method 1: sorting + select top K
先把array 从小到大排序一遍然后选择前k个值
Time: O(nlogn) for sorting on average . Space: O(n) 如果用merge sort。 O(logn)如果用quicksort recursion method并且recursion tree是balance。如果不是balance,O(n)
method 2: heap sorting using min-heap
先用一个size=k的min-heap对input array前k个element的负值进行heapify(由于python的heap是min-heap, 我们需要用max-heap来找最小的k个值,所以需要取反)
把剩下的n-k elements 进行insert 到heap里面并把最小的值pop出来
不断重复step2直到n-k个element全部被遍历
把heap剩下的k个element pop 出来并取反得到排序后的k smallest element
Time: O(k + klogk + (n-k)logk + klogk) = O(nlogk + k). Space: O(k)