Kth Largest Element in an Array

MediumArrayDivide and ConquerSortingHeap (Priority Queue)Quickselect

Solution

function swap(nums: number[], i: number, j: number) {
  [nums[i], nums[j]] = [nums[j], nums[i]];
}
 
function quickSelect(nums: number[], left: number, right: number, k: number): number {
  let pivot = left;
 
  for (let i = left; i < right; i++) {
    if (nums[i] <= nums[right]) {
      swap(nums, pivot, i);
      pivot += 1;
    }
  }
  swap(nums, pivot, right);
 
  const count = right - pivot + 1;
  if (count === k) {
    return nums[pivot];
  } else if (k < count) {
    return quickSelect(nums, pivot + 1, right, k);
  } else {
    return quickSelect(nums, left, pivot - 1, k - count);
  }
}
 
export function findKthLargest(nums: number[], k: number): number {
  return quickSelect(nums, 0, nums.length - 1, k);
}
 
/* Using Sort
function findKthLargest(nums: number[], k: number): number {
  return nums.sort((a, b) => b - a)[k - 1];
}
*/