Open In App

K’th Smallest/Largest Element using STL

Last Updated : 08 Feb, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

Given an array and a number k where k is smaller than size of array, we need to find the k’th smallest element in the given array. Examples:

Input : arr[] = {7, 10, 4, 3, 20, 15}
            k = 2
Output : 4
Smallest element is 3. Second smallest
is 4.

Input : arr[] = {7, 10, 4, 3, 3, 15}
            k = 2
Output : 4
Even if there are more than one occurrences
of 3, answer should be 4.

Input :arr[] = {7, 10, 4, 3, 20, 15}
          k = 4
Output : 10

We use set in C++ STL. 1) Insert all elements into a set. 2) Traverse the set and print k-th element. 

Implementation:

C++




// STL based C++ program to find k-th smallest
// element.
#include <bits/stdc++.h>
using namespace std;
 
int kthSmallest(int arr[], int n, int k)
{
// Insert all elements into the set
set<int> s;
for (int i = 0; i < n; i++)
s.insert(arr[i]);
 
// Traverse set and print k-th element
auto it = s.begin();
for (int i = 0; i < k - 1; i++)
it++;
return *it;
}
 
int main()
{
int arr[] = { 12, 3, 5, 7, 3, 19 };
int n = sizeof(arr) / sizeof(arr[0]), k = 2;
cout << "K'th smallest element is "
<< kthSmallest(arr, n, k);
return 0;
}


Java




import java.util.Set;
import java.util.TreeSet;
 
public class KthSmallest {
    public static int kthSmallest(int[] arr, int n, int k) {
        // Insert all elements into the set
        Set<Integer> s = new TreeSet<Integer>();
        for (int i = 0; i < n; i++) {
            s.add(arr[i]);
        }
 
        // Traverse set and print k-th element
        int i = 0;
        for (Integer num : s) {
            if (i == k - 1) {
                return num;
            }
            i++;
        }
        return -1;
    }
 
    public static void main(String[] args) {
        int[] arr = {12, 3, 5, 7, 3, 19};
        int n = arr.length, k = 2;
        System.out.println("K'th smallest element is " + kthSmallest(arr, n, k));
    }
}


Python3




# STL based python program to find k-th smallest
# element.
from sortedcontainers import SortedList, SortedSet, SortedDict
 
def kthSmallest(arr, n, k) :
    # Insert all elements into the set
    s=SortedSet();
    for i in range(0,n):
        s.add(arr[i]);
     
    # Traverse set and print k-th element
    i=1;
    ans=-1;
    for val in s:
        if(i==k):
            ans=val;
            break;
        i+=1;
 
    return ans;
 
arr = [ 12, 3, 5, 7, 3, 19 ];
n = len(arr);
k = 2;
print("K'th smallest element is ",kthSmallest(arr, n, k));


C#




using System;
using System.Linq;
using System.Collections.Generic;
 
class KthSmallest
{
    public static int kthSmallest(int[] arr, int k)
    {
        // Insert all elements into the set
        var s = new SortedSet<int>(arr);
 
        // Traverse set and print k-th element
        return s.ElementAt(k - 1);
    }
 
    public static void Main(string[] args)
    {
        int[] arr = { 12, 3, 5, 7, 3, 19 };
        int k = 2;
        Console.WriteLine("K'th smallest element is " + kthSmallest(arr, k));
    }
}


Javascript




// Javascript program to find k-th smallest element.
 
function kthSmallest(arr, n, k)
{
// Insert all elements into the set
    let s= new Set();
    for (let i = 0; i < n; i++)
    s.add(arr[i]);
     
    // Traverse set and print k-th element
    let i = 0;
    for (const entry of s.values())
    {
        if(i==k)
        {
            i=entry;
            break;
        }
        i++;
    }
         
    return i;
}
 
let arr = [ 12, 3, 5, 7, 3, 19 ];
let n = arr.length, k = 2;
document.write("K'th smallest element is "+ kthSmallest(arr, n, k));


Output

K'th smallest element is 5

Time complexity: O(n Log n). Note that set in STL uses a self-balancing BST internally and therefore time complexity of search and insert operations is O(log n). 
Auxiliary Space: O(n) where n is size of array, since n extra space has been taken.

Related Posts : 
K’th Smallest/Largest Element in Unsorted Array | Set 1
K’th Smallest/Largest Element in Unsorted Array | Set 2 (Expected Linear Time K’th Smallest/Largest Element in Unsorted Array | Set 3 (Worst Case Linear Time)



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads