Find k maximum elements of array in original order
Last Updated :
29 Mar, 2024
Given an array arr[] and an integer k, we need to print k maximum elements of given array. The elements should printed in the order of the input.
Note : k is always less than or equal to n.
Examples:
Input : arr[] = {10 50 30 60 15}
k = 2
Output : 50 60
The top 2 elements are printed
as per their appearance in original
array.
Input : arr[] = {50 8 45 12 25 40 84}
k = 3
Output : 50 45 84
Method 1: We search for the maximum element k times in the given array. Each time we find one maximum element, we print it and replace it with minus infinite (INT_MIN in C) in the array. Also, the position of all k maximum elements is marked using an array so that with the help of that array we can print the elements in the order given in the original array. The time complexity of this method is O(n*k).
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
void printMax( int arr[], int k, int n)
{
int brr[n]={0},crr[n];
for ( int i=0;i<n;i++)
{
crr[i]=arr[i];
}
for ( int i=0;i<k;i++)
{
int maxi=INT_MIN;
int index;
for ( int j=0;j<n;j++)
{
if (maxi<arr[j])
{
maxi=arr[j];
index=j;
}
}
brr[index]=1;
arr[index]=INT_MIN;
}
for ( int i=0;i<n;i++)
{
if (brr[i]==1)
cout<<crr[i]<< " " ;
}
}
int main()
{
int arr[] = { 50, 8, 45, 12, 25, 40, 84 };
int n = sizeof (arr) / sizeof (arr[0]);
int k = 3;
printMax(arr, k, n);
return 0;
}
|
Java
import java.util.*;
class GFG {
public static void printMax( int arr[], int k, int n)
{
int brr[] = new int [n];
int crr[] = new int [n];
for ( int i = 0 ; i < n; i++)
brr[i] = 0 ;
for ( int i = 0 ; i < n; i++) {
crr[i] = arr[i];
}
for ( int i = 0 ; i < k; i++)
{
int maxi = Integer.MIN_VALUE;
int index = 0 ;
for ( int j = 0 ; j < n; j++) {
if (maxi < arr[j]) {
maxi = arr[j];
index = j;
}
}
brr[index] = 1 ;
arr[index] = Integer.MIN_VALUE;
}
for ( int i = 0 ; i < n; i++)
{
if (brr[i] == 1 )
System.out.print(crr[i] + " " );
}
}
public static void main(String[] args)
{
int arr[] = new int [] { 50 , 8 , 45 , 12 , 25 , 40 , 84 };
int n = arr.length;
int k = 3 ;
printMax(arr, k, n);
}
}
|
Python3
def printMax(arr, k, n):
brr = [ 0 for _ in range (n)]
crr = [ 0 for _ in range (n)]
for i in range ( 0 , n):
crr[i] = arr[i]
for i in range ( 0 , k):
maxi = - 99999
index = 0
for j in range ( 0 , n):
if maxi < arr[j]:
maxi = arr[j]
index = j
brr[index] = 1
arr[index] = - 99999
for i in range ( 0 , n):
if brr[i] = = 1 :
print (crr[i], end = '')
print ( " " , end = '')
if __name__ = = "__main__" :
arr = [ 50 , 8 , 45 , 12 , 25 , 40 , 84 ]
n = len (arr)
k = 3
printMax(arr, k, n)
|
C#
using System;
using System.Linq;
class GFG {
public static void printMax( int [] arr, int k, int n)
{
int [] brr = new int [n];
int [] crr = new int [n];
for ( int i = 0; i < n; i++) {
brr[i] = 0;
crr[i] = arr[i];
}
for ( int i = 0; i < k; i++) {
int maxi = Int32.MinValue;
int index = 0;
for ( int j = 0; j < n; j++) {
if (maxi < arr[j]) {
maxi = arr[j];
index = j;
}
}
brr[index] = 1;
arr[index] = Int32.MinValue;
}
for ( int i = 0; i < n; i++) {
if (brr[i] == 1)
Console.Write(crr[i] + " " );
}
}
public static void Main()
{
int [] arr = { 50, 8, 45, 12, 25, 40, 84 };
int n = arr.Length;
int k = 3;
printMax(arr, k, n);
}
}
|
Javascript
function printMax(arr, k, n)
{
var brr = Array(n).fill(0);
var crr = Array(n).fill(0);
for ( var i =0; i < n; i++)
{
brr[i] = 0;
}
for ( var i=0; i < n; i++)
{
crr[i] = arr[i];
}
for ( var i=0; i < k; i++)
{
var maxi = -Number.MAX_VALUE;
var index = 0;
for ( var j =0; j < n; j++)
{
if (maxi < arr[j])
{
maxi = arr[j];
index = j;
}
}
brr[index] = 1;
arr[index] = -Number.MAX_VALUE;
}
for ( var i=0; i < n; i++)
{
if (brr[i] == 1)
{
console.log(crr[i] + " " );
}
}
}
var arr = [50, 8, 45, 12, 25, 40, 84];
var n = arr.length;
var k = 3;
printMax(arr, k, n);
|
Time Complexity: O(n*k)
Auxiliary Space: O(n)
Method 2: In this method, we store the original array in a new array and will sort the new array in descending order. After sorting, we iterate the original array from 0 to n and print all those elements that appear in first k elements of new array. For searching, we can do Binary Search.
C++
#include <bits/stdc++.h>
using namespace std;
void printMax( int arr[], int k, int n)
{
vector< int > brr(arr, arr + n);
sort(brr.begin(), brr.end(), greater< int >());
for ( int i = 0; i < n; ++i)
if (binary_search(brr.begin(),
brr.begin() + k, arr[i],
greater< int >()))
cout << arr[i] << " " ;
}
int main()
{
int arr[] = { 50, 8, 45, 12, 25, 40, 84 };
int n = sizeof (arr) / sizeof (arr[0]);
int k = 3;
printMax(arr, k, n);
return 0;
}
|
Java
import java.util.Arrays;
import java.util.Collections;
public class GfG {
public static void printMax( int arr[], int k, int n)
{
Integer[] brr = new Integer[n];
for ( int i = 0 ; i < n; i++)
brr[i] = arr[i];
Arrays.sort(brr, Collections.reverseOrder());
for ( int i = 0 ; i < n; ++i)
if (Arrays.binarySearch(brr, arr[i],
Collections.reverseOrder()) >= 0
&& Arrays.binarySearch(brr, arr[i],
Collections.reverseOrder()) < k)
System.out.print(arr[i]+ " " );
}
public static void main(String args[])
{
int arr[] = { 50 , 8 , 45 , 12 , 25 , 40 , 84 };
int n = arr.length;
int k = 3 ;
printMax(arr, k, n);
}
}
|
Python3
def printMax(arr, k, n):
brr = arr.copy()
brr.sort(reverse = True )
for i in range (n):
if (arr[i] in brr[ 0 :k]):
print (arr[i], end = " " )
arr = [ 50 , 8 , 45 , 12 , 25 , 40 , 84 ]
n = len (arr)
k = 3
printMax(arr, k, n)
|
C#
using System;
using System.Linq;
class GFG{
public static void printMax( int [] arr, int k,
int n)
{
int [] brr = new int [n];
for ( int i = 0; i < n; i++)
brr[i] = arr[i];
Array.Sort(brr);
Array.Reverse(brr);
int [] crr = new int [k];
for ( int i = 0; i < k; i++)
{
crr[i] = brr[i];
}
for ( int i = 0; i < n; ++i)
{
if (crr.Contains(arr[i]))
{
Console.Write(arr[i] + " " );
}
}
}
public static void Main()
{
int [] arr = { 50, 8, 45, 12, 25, 40, 84 };
int n = arr.Length;
int k = 3;
printMax(arr, k, n);
}
}
|
Javascript
<script>
function printMax(arr, k, n)
{
var brr = arr.slice();
brr.sort((a, b) => b - a);
for ( var i = 0; i < n; ++i)
if (brr.indexOf(arr[i]) < k)
document.write(arr[i] + " " );
}
var arr = [ 50, 8, 45, 12, 25, 40, 84 ];
var n = arr.length;
var k = 3;
printMax(arr, k, n);
</script>
|
Time Complexity: O(n Log n) for sorting.
Auxiliary Space: O(n)
Share your thoughts in the comments
Please Login to comment...