基于堆排序
function swap(nums, x, y) { var temp = nums[x]; nums[x] = nums[y]; nums[y] = temp;}function maxHeapify(nums, nonLeafNode, heapSize) { var left = nonLeafNode * 2 + 1; var right = nonLeafNode * 2 + 2; var largest = nonLeafNode; if (left < heapSize && nums[left] > nums[largest]) { largest = left; } if (right < heapSize && nums[right] > nums[largest]) { largest = right; } if (largest !== nonLeafNode) { swap(nums, nonLeafNode, largest); maxHeapify(nums, largest, heapSize); }}function buildMaxHeap(nums, heapSize) { for (var nonLeafNode = Math.floor(heapSize / 2) - 1; nonLeafNode >= 0; nonLeafNode--) { maxHeapify(nums, nonLeafNode, heapSize); }}function findKthLargest(nums, k) { var heapSize = nums.length; buildMaxHeap(nums, heapSize); for (var i = nums.length - 1; i >= nums.length - k + 1; i--) { swap(nums, 0, i); maxHeapify(nums, 0, --heapSize); } return nums[0];}
总结