LeetCode 第215题
利用堆排序降低复杂度
js
const findKthLargest = function (nums, k) {
let heapSize = nums.length;
buildMaxHeap(nums, heapSize);
for (let i = nums.length - 1; i >= nums.length - k + 1; i--) {
swap(nums, 0, i);
--heapSize;
maxHeapify(nums, 0, heapSize);
}
return nums[0];
function buildMaxHeap(nums, heapSize) {
for (let i = Math.floor(heapSize / 2) - 1; i >= 0; i--) {
maxHeapify(nums, i, heapSize);
}
}
function maxHeapify(nums, i, heapSize) {
let l = i * 2 + 1;
let r = i * 2 + 2;
let largest = i;
if (l < heapSize && nums[l] > nums[largest]) {
largest = l;
}
if (r < heapSize && nums[r] > nums[largest]) {
largest = r;
}
if (largest !== i) {
swap(nums, i, largest);
maxHeapify(nums, largest, heapSize);
}
}
function swap(a, i, j) {
let temp = a[i];
a[i] = a[j];
a[j] = temp;
}
};