JavaScript allows us to find kth largest/smallest element in an array. We are given an array containing some elements, we have to find kth smallest/largest element from the array where k is a number greater than zero and less than equal to the total number of elements present in the array.
There are several ways to find the kth largest/smallest element in an array using JavaScript which are as follows:
Table of Content
Using the Brute force approach
We are going to discuss how to find kth We will arrange the elements of the given array in a sorted manner. We will assume that the array is present in zero-based indexing order. If n is the size of the array then we return (n-k) as the kth largest element of the array and (k-1) as the smallest element of the array (because the array is 0-base indexed).
Example: JavaScript code, encapsulated in a class, efficiently sorts an array and prints the kth largest and smallest elements, providing a concise solution for such queries.
class Solution { kthLargestAndSmallest(arr, k) {
arr.sort((a, b) => a - b);
const n = arr.length;
console.log(`kth Largest element in the array is ${arr[n - k]}`);
console.log(`kth Smallest element in the array is ${arr[k - 1]}`);
}
} const obj = new Solution();
const arr = [6, 4, 3, 7, 8, 2]; obj.kthLargestAndSmallest(arr, 4); |
kth Largest element in the array is 4 kth Smallest element in the array is 6
Time Complexity : O(nlogn) , we are using inbuilt sort function.
Space Complexity : O(1) , as it is taking constant time
Using heaps
To reduce the time complexity of above brute force approach we will use heap max-heap/mean-heap to return the kth largest/smallest element present in the array. Max-heap is used to find kth largest element of array because it stores elements in descending order and . For kth largest element we will push elements in max-heap and then pop elements till k-1 elements and then return top element of max-heap as kth largest element of the array. Similarly, for kth smallest element we will push elements in min-heap and then pop elements till k-1 elements and then return top element of min-heap as kth smallest element of the array. There is no inbuilt function for implementing max/min heap in JavaScript. So we have to first implement priorityQueue for using heap.
Example: This JavaScript code, utilizing priority queues, efficiently finds the kth largest and smallest elements in an array, offering a structured and scalable solution for such computations.
class Solution { kthLargestElement(arr, k) {
const pq = new PriorityQueue();
for (let i = 0; i < arr.length; i++) {
pq.push(arr[i]);
}
let s = k - 1;
while (s > 0) {
pq.pop();
s--;
}
console.log(`Kth Largest element of the array is ${pq.top()}`);
}
kthSmallestElement(arr, k) {
const pq = new PriorityQueueMin();
for (let i = 0; i < arr.length; i++) {
pq.push(arr[i]);
}
let s = k - 1;
while (s > 0) {
pq.pop();
s--;
}
console.log(`Kth Smallest element of the array is ${pq.top()}`);
}
} class PriorityQueue { constructor() {
this .data = [];
}
push(value) {
this .data.push(value);
}
pop() {
this .data.sort((a, b) => b - a);
this .data.pop();
}
top() {
this .data.sort((a, b) => b - a);
return this .data[0];
}
} class PriorityQueueMin { constructor() {
this .data = [];
}
push(value) {
this .data.push(value);
}
pop() {
this .data.sort((a, b) => a - b);
this .data.pop();
}
top() {
this .data.sort((a, b) => a - b);
return this .data[0];
}
} const obj = new Solution();
const arr = [6, 5, 3, 8, 9]; obj.kthLargestElement(arr, 4); obj.kthSmallestElement(arr, 4); |
Kth Largest element of the array is 9 Kth Smallest element of the array is 3
Time Complexity : O(k+(n-k)*log(k)) , we are using heap implementation.
Space Complexity : O(k)