function sortMin(input, k) {
if (k > input.length || k == 0) {
return [];
}
let arr = []; //最小的數放在里面
arr = searchMin(input, 0, input.length - 1, k).slice(0, k);
return arr;
}
//利用區域快速排序(從小到大)
function quickSort(a, start = 0, end = a.length - 1) {
let i = start;
let j = end;
let baseVal = a[end];
while (i < j) {
while (i < j && a[i] <= baseVal) {
i++;
}
a[j] = a[i];
while (j > i && a[j] >= baseVal) {
j--;
}
a[i] = a[j];
}
a[j] = baseVal;
return j;
}
function searchMin(input, start = 0, end = input.length - 1, k) {
if (start >= end) {
return;
}
let index = quickSort(input, start, end);
console.log(index);
//如果k正好等于哨兵
if (k <= index + 1) {
input.slice(0, k);
//console.log(arr);
input.sort((a, b) => a - b);
} else {
return searchMin(input, index + 1, end, k);
}
return input;
}
uj5u.com熱心網友回復:
這道題效率最高的解法應該是用優先佇列做最大堆來解。當然,不計效率的話就排序整個陣列,取前k個元素
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/245469.html
標籤:JavaScript
上一篇:釘釘h5微應用頭部自帶的回傳失效
