快排。模板套路就行了。
function GetLeastNumbers_Solution(input, k)
{
// 异常数据
if (k > input.length || k <= 0) return [];
return quickSearch(input, 0, input.length - 1, k - 1);
}
function quickSearch(a, low, high, k) {
let p = part(a, low, high);
if (p === k) {
// 这里主要考虑到面试官可能限制使用本身的sort函数
return part(a.slice(0, k + 1), 0, k, true);
}
return p > k ? quickSearch(a, low, p - 1, k) : quickSearch(a, p + 1, high, k);
}
// findRes 是为了能复用函数
function part(a, low, high, findRes = false) {
if (low >= high && findRes) return a;
let p = a[low];
let i = low;
let j = high + 1;
while (true) {
while (++i <= high && a[i] < p) ;
while (--j >= low && a[j] > p) ;
if (i >= j) break;
let temp = a[i];
a[i] = a[j];
a[j] = temp;
}
a[low] = a[j];
a[j] = p;
if (findRes) {
part(a, low, j - 1, findRes);
part(a, j + 1, high, findRes);
return a;
}
return j;
}
module.exports = {
GetLeastNumbers_Solution : GetLeastNumbers_Solution
}; 
京公网安备 11010502036488号