C++ Program to Find k maximum elements of array in original order
Last Updated :
17 Aug, 2023
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. The time complexity of this method is O(n*k).
C++
#include <bits/stdc++.h>
using namespace std;
void printMax( int a[], int n, int k)
{
int b[n],c[n];
for ( int i=0;i<n;i++)
{
c[i]=a[i];
b[i]=0;
}
for ( int i=0;i<k;i++)
{
int maxi=INT_MIN;
int index;
for ( int j=0;j<n;j++)
{
if (a[j]>maxi)
{
maxi=a[j];
index=j;
}
}
b[index]=1;
a[index]=INT_MIN;
}
for ( int i=0;i<n;i++)
{
if (b[i]==1)
cout<<c[i]<< " " ;
}
}
int main()
{
int a[] = { 50, 8, 45, 12, 25, 40, 84 };
int n = sizeof (a) / sizeof (a[0]);
int k = 3;
printMax(a, n, k);
return 0;
}
|
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;
}
|
Output:
50 45 84
Time Complexity: O(n Log n) for sorting.
Auxiliary Space: O(n)
Please refer complete article on Find k maximum elements of array in original order for more details!
Share your thoughts in the comments
Please Login to comment...