Kth Largest Element in an Array

Problem Statement

Given an integer array nums[] and an integer k, find the kth largest element in the array.

Exanple: Input: val = [3, 2, 1], wt = [5, 6, 4], k=2, Output: 2

Approach 1: Sorting

Explanation: Sort the array and then find the kth largest element.

Time Complexity: O(nlogn)

Space Complexity: O(1) excluding the auxiliary array required

function Kthlargestelement(arr, k):
    sort(arr) // Sort the array in ascending order
    return arr[n-k] // Return the kth largest element
          

Approach 2: Using MaxHeap

Explanation: Store all the elements in the heap and pop k times to get kth largest element.

Time Complexity: O(nlogn+klogn)=O(nlogn)

Space Complexity: O(n)

pq = new MaxHeap()
function Kthlargestelement(arr, k):
    for i in range(0, n):
        pq.push(arr[i])
    for i in range(0, k-1):
        pq.pop()
    return pq.top()
    
          

Approach 3: Using Quickselect(Divide and Conquer)

Explanation: Using modified QuickSort and during each step with help of index of pivot performing Binary Search to look for kth Largest element.

Time Complexity: O(nlogn) worst case:O(n2)

Space Complexity: O(logn) worst case:O(n) due to recursive stack

function partition(arr, low, high):
    pivot = arr[high]
    i = low - 1
    for j = low to high - 1:
        if arr[j] <= pivot:
            i = i + 1
            swap arr[i] and arr[j]
    swap arr[i + 1] and arr[high]
    return i + 1

function quickselect(arr, low, high, k):
    if low == high:
        return arr[low]
    pivotIndex = partition(arr, low, high)
    if k == pivotIndex:
        return arr[k]
    else if k < pivotIndex:
        return quickselect(arr, low, pivotIndex - 1, k)
    else:
        return quickselect(arr, pivotIndex + 1, high, k)

function Kthlargestelement(arr, k):
    n = length(arr)
    return quickselect(arr, 0, n - 1, n - k)
            
Flowchart