输入整数数组 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]
解题: 其实就是sort后输出前k个,这样一看是不是很简单,但是,面试的时候绝对不是简单的sort就行的,这个题考的是quickSort
下面有两种实现一种是简单的sort,一种是这个题考的是quickSort
var getLeastNumbers = function(arr, k) {
arr.sort((a,b)=>a-b)
return arr.slice(0,k)
};
var quick_sort2 = function (arr, l, r) {
if (l >= r) return;
let l1 = l,
r1 = r;
while (l1 < r1) {
while (l1 < r1 && arr[r1] >= arr[l]) {
r1--;
}
while (l1 < r1 && arr[l1] <= arr[l]) {
l1++;
}
swap(arr, r1, l1);
}
swap(arr, l1, l);
quick_sort2(arr, l, r1 - 1);
quick_sort2(arr, r1 + 1, r);
};
var swap = function (arr, i, j) {
[arr[i], arr[j]] = [arr[j], arr[i]];
};
var getLeastNumbers = function (arr, k) {
quick_sort2(arr, 0, arr.length - 1);
return arr.slice(0, k);
};