每日一题:剑指Offer 40.无序数组中最小的K个数
1、题目
输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。
示例 1:
输入:arr = [3,2,1], k = 2
输出:[1,2] 或者 [2,1]
示例 2:
输入:arr = [0,1,2,1], k = 1
输出:[0]
限制:
0 <= k <= arr.length <= 10000
0 <= arr[i] <= 10000
2、解法:排序(O(NlogN))/最小堆(O(NlogK))
代码中的堆构造和调整算法也是值得仔细学习一下的。
class Solution:
def getLeastNumbers(self, arr: List[int], k: int) -> List[int]:
if k>=len(arr):
return arr
elif k<1:
return []
### methodType为0时调用排序算法,1时调用最小堆算法
methodType = 1