Find the "Kth" max and min element of an array - 450DSA Cracker Solution
Table of contents
Kth smallest element
Given an array arr[] and an integer K where K is smaller than size of array, the task is to find the Kth smallest element in the given array. It is given that all array elements are distinct.
Note :- l and r denotes the starting and ending index of the array.
Example 1:
Input:
N = 6
arr[] = 7 10 4 3 20 15
K = 3
L=0 R=5
Output : 7
Explanation :
3rd smallest element in the given
array is 7.
Example 2:
Input:
N = 5
arr[] = 7 10 4 20 15
K = 4 L=0 R=4
Output : 15
Explanation :
4th smallest element in the given
array is 15.
Your Task:
You don't have to read input or print anything. Your task is to complete the function kthSmallest() which takes the array arr[], integers l and r denoting the starting and ending index of the array and an integer K as input and returns the Kth smallest element.
Expected Time Complexity: O(n*log(n) )
Expected Auxiliary Space: O(log(n))
Code
Solution 1:
int kthSmallest(int arr[], int l, int n, int k) { int max_element = arr[0];
for (int i = 1; i <= n; i++) {
if (arr[i] > max_element) {
max_element = arr[i];
}
}
int freq[max_element + 1] = {0};
for (int i = 0; i <= n; i++) {
freq[arr[i]]++;
} int count = 0;
for (int i = 0; i <= max_element; i++) {
if (freq[i] != 0) {
count += freq[i];
if (count >= k) {
return i;
}
}
}
return -1; //code here
}
Solution 2
int max = arr[0];
for(int i=0;i<=n;i++)
{
if(arr[i] > max)
max= arr[i];
}
int freq[max +1 ] ={0}, output[n] ,count=0;
for(int i=0;i<=n ;i++)
++freq[arr[i]];
for(int i=1;i<=max;i++)
freq[i] = freq[i] + freq[i-1];
for(int i=0;i<=n;i++)
{
output[freq[arr[i]] -1] = arr[i];
}
if (k > n+1) return -1;
else return output[k-1];
Solution 3
priority_queue <int> pq;
for(int i=l;i<=r;i++)
{
if(pq.size() == k )
{
if(pq.top() > arr[i]){
pq.pop();
pq.push(arr[i]);
}
}
else
{
pq.push(arr[i]);
}
}
return pq.top();