Top-K smallest
0. Links
laicode K-largest: https://app.laicode.io/app/problem/436
1. 题目
题目描述
给定一个数组,找出其中最小的K个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。如果K>数组的长度,那么返回一个空的数组示例1
输入
复制
[4,5,1,6,2,7,3,8],4返回值
复制
[1,2,3,4]2. 思路
a.方法1: heap,用max heap (min heap + 把value 取反reverse)思路
1. 先把前k个element build heap
2. 在剩下的element里面不断把element 取反并加入heap,heap每次把当前最小(取反最大)的数pop出去,剩下的heap里面的k element就是当前最大(加负号取反后最小的k个数)
3. Time: O(k) for popping top k elements to list, O(klogk) for build heap, O((n-k)logk) for updating heap, O(k) for reversing list and return result. So O(k+ nlogk)
4. Space: O(k) for heap
方法2:直接先通过min heap把整个list heapify,再pop到剩下k个element
Time: O(n +klogn) in total, O(n) for building heap, O(klogn) popping 最小的k个element
Space: O(n)
方法3: quickselect
3.Coding
Last updated
Was this helpful?