function heapify(nums: number[], heapSize: number, i: number): void {
let largest = i;
const l = 2 * i + 1;
const r = 2 * i + 2;
if (l < heapSize && nums[l] > nums[largest]) largest = l;
if (r < heapSize && nums[r] > nums[largest]) largest = r;
if (largest !== i) {
[nums[i], nums[largest]] = [nums[largest], nums[i]];
heapify(nums, heapSize, largest);
}
}
function findKthLargest(nums: number[], k: number): number {
let heapSize = nums.length;
for (let i = Math.floor(heapSize / 2) - 1; i >= 0; i--) {
heapify(nums, heapSize, i);
}
for (let i = 0; i < k; i++) {
const max = nums[0];
nums[0] = nums[heapSize - 1];
heapSize--;
heapify(nums, heapSize, 0);
if (i === k - 1) return max;
}
return -1;
}This code builds a max heap from the array (O(n)) and extracts the max element k times (O(k log n)) to find the kth largest.