题解 | #寻找第K大#
寻找第K大
https://www.nowcoder.com/practice/e016ad9b7f0b45048c58a9f27ba618bf
function findKth(a, n, K) {
function quickSelect(arr, left, right, K) {
if (left === right) return arr[left];
let pivotIndex = partition(arr, left, right);
if (K === pivotIndex) {
return arr[K];
} else if (K < pivotIndex) {
return quickSelect(arr, left, pivotIndex - 1, K);
} else {
return quickSelect(arr, pivotIndex + 1, right, K);
}
}
function partition(arr, left, right) {
let pivot = arr[right];
let i = left;
for (let j = left; j < right; j++) {
if (arr[j] > pivot) {
// 对于找第 K 大的元素,用大于号
[arr[i], arr[j]] = [arr[j], arr[i]];
i++;
}
}
[arr[i], arr[right]] = [arr[right], arr[i]];
return i;
}
return quickSelect(a, 0, n - 1, K - 1);
}
module.exports = {
findKth: findKth,
};

查看21道真题和解析