Kth Largest Element in an Array: This Java program finds the k-th largest element from an array of integers using a min-heap. Let’s break down the program step by step to understand what it does:
Find Kth Largest Element in an Array
package com.softwaretestingo.interviewprograms;
import java.util.Arrays;
import java.util.List;
import java.util.PriorityQueue;
import java.util.Scanner;
public class InterviewPrograms82
{
// Function to find the k'th largest element in an array using min-heap
public static int findKthLargest(List<Integer> ints, int k)
{
// base case
if (ints == null || ints.size() < k) {
System.exit(-1);
}
// create a min-heap using the `PriorityQueue` class and insert
// the first `k` array elements into the heap
PriorityQueue<Integer> pq = new PriorityQueue<>(ints.subList(0, k));
// do for remaining array elements
for (int i = k; i < ints.size(); i++)
{
// if the current element is more than the root of the heap
if (ints.get(i) > pq.peek())
{
// replace root with the current element
pq.poll();
pq.add(ints.get(i));
}
}
// return the root of min-heap
return pq.peek();
}
public static void main(String[] args)
{
List<Integer> ints = Arrays.asList(17, 24, 6, 3, 39, 1);
Scanner sc = new Scanner(System.in);
System.out.print("Enter the value of k : ");
int k = sc.nextInt();
System.out.println(k+" largest array element From Array is " + findKthLargest(ints, k));
}
}
Output
Enter the value of k : 3 3 largest array element From Array is 17
Alternative Way 1
This Java program finds the k-th largest element from an array of integers using a max-heap. It uses a priority queue to efficiently find the k-th largest element without sorting the entire array. Let’s break down the program step by step to understand what it does:
package com.softwaretestingo.interviewprograms;
import java.util.Arrays;
import java.util.List;
import java.util.PriorityQueue;
public class InterviewPrograms82_1
{
// Function to find the k'th largest element in an array using max-heap
public static int findKthLargest(List<Integer> ints, int k)
{
// base case
if (ints == null || ints.size() < k)
{
System.exit(-1);
}
// build a max-heap using the `PriorityQueue` class from all
// elements in the list
PriorityQueue<Integer> pq = new PriorityQueue<>((a, b) -> b - a);
// or pass `Comparator.reverseOrder()`
pq.addAll(ints);
// pop from max-heap exactly `k-1` times
while (--k > 0)
{
pq.poll();
}
// return the root of max-heap
return pq.peek();
}
public static void main(String[] args)
{
List<Integer> ints = Arrays.asList(7, 4, 6, 3, 9, 1);
int k = 2;
System.out.println("k'th largest array element is " + findKthLargest(ints, k));
}
}
Output
k'th largest array element is 7
Alternative Way 2:
This Java program finds the k-th largest element from an array of integers using a simple sorting technique. It takes input from the user, sorts the array in ascending order, and then identifies the k-th largest element. Let’s break down the program step by step to understand what it does:
package com.softwaretestingo.interviewprograms;
import java.util.Scanner;
public class InterviewPrograms82_2
{
int a[] = new int[20], n, k;
// function to take input
void accept ( )
{
int i ;
// taking the inputs
Scanner sc = new Scanner(System.in);
System.out.print(" Enter the number of elements : ");
n = sc.nextInt();
System.out.print ("Enter the array elements : ");
for (i=0; i<n; i++ )
{
a[i] = sc.nextInt();
}
System.out.print("Enter the value of k : ");
k = sc.nextInt();
}
//function to find the kth largest or smallest
void find ( )
{
int i, j, t;
// sorting the list / array in ascending order
for (i=0; i<n; i++ )
{
for (j=0; j<n-i-1; j++)
{
if (a[j]>a[j+1])
{
t = a[j];
a[j]= a[j+1];
a[j+1] = t ;
}
}
}
// printing the sorted array
System.out.print("The sorted list is : ");
for (i=0; i<n; i++ )
{
System.out.print (a[i]+" ");
}
// finding the kth largest element
if ( 1 == 1 )
{
// pointing to the kth largest element
for (i=n-1; i>=n-k; i--) ;
System.out.print ("\nThe " + k + " th largest element is : " + a [ i + 1 ] ) ;
}
}
public static void main(String[] args)
{
// creating an object
InterviewPrograms82_2 k = new InterviewPrograms82_2();
// calling the functions
k.accept();
k.find();
}
}
Output
Enter the number of elements : 5 Enter the array elements : 10 20 30 40 50 Enter the value of k : 3 The sorted list is : 10 20 30 40 50 The 3 th largest element is : 30