题目描述
输入整数数组 $arr$ ,找出其中最小的 $k$ 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。
示例 1:
1 | 输入:arr = [3,2,1], k = 2 |
示例 2:
1 | 输入:arr = [0,1,2,1], k = 1 |
限制:
- $0 <= k <= arr.length <= 10000$
- $0 <= arr[i] <= 10000$
算法
(堆)) $O(n)$
使用大根堆存储 $k$ 个最小的数,怎么存呢,遍历每个数,先加到大根堆中,如果堆的大小大于 $k$ 则弹出一个堆顶,所以数都遍历完后,此时堆中存的就是最小的 $k$ 个数。
时间复杂度
$O(n)$
空间复杂度
$O(n)$
C++ 代码
1 | class Solution { |