Related Articles
Find k maximum elements of array in original order
• Difficulty Level : Easy

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
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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 repalce it with minus infinite (INT_MIN in C) in the array. The time complexity of this method is O(n*k).

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++

 `// CPP program to find k maximum elements ``// of array in original order``#include ``using` `namespace` `std;`` ` `// Function to print m Maximum elements``void` `printMax(``int` `arr[], ``int` `k, ``int` `n)``{``    ``// vector to store the copy of the``    ``// original array``    ``vector<``int``> brr(arr, arr + n);`` ` `    ``// Sorting the vector in descending``    ``// order. Please refer below link for``    ``// details``    ``// https://www.geeksforgeeks.org/sort-c-stl/``    ``sort(brr.begin(), brr.end(), greater<``int``>());`` ` `    ``// Traversing through original array and``    ``// printing all those elements that are``    ``// in first k of sorted vector.``    ``// Please refer https://goo.gl/44Rwgt``    ``// for details of binary_search()``    ``for` `(``int` `i = 0; i < n; ++i)``        ``if` `(binary_search(brr.begin(),``                 ``brr.begin() + k, arr[i], ``                        ``greater<``int``>()))``            ``cout << arr[i] << ``" "``;``}`` ` `// Driver code``int` `main()``{``    ``int` `arr[] = { 50, 8, 45, 12, 25, 40, 84 };``    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr);``    ``int` `k = 3;``    ``printMax(arr, k, n);``    ``return` `0;``}`

## Java

 `// Java program to find k maximum  ``// elements of array in original order``import` `java.util.Arrays;``import` `java.util.Collections;`` ` `public` `class` `GfG {``     ` `    ``// Function to print m Maximum elements``    ``public` `static` `void` `printMax(``int` `arr[], ``int` `k, ``int` `n)``    ``{``        ``// Array to store the copy ``        ``// of the original array``        ``Integer[] brr = ``new` `Integer[n];``         ` `        ``for` `(``int` `i = ``0``; i < n; i++)``        ``brr[i] = arr[i];``         ` `        ``// Sorting the array in ``        ``// descending order``        ``Arrays.sort(brr, Collections.reverseOrder());``     ` `        ``// Traversing through original array and``        ``// printing all those elements that are``        ``// in first k of sorted array.``        ``// Please refer https://goo.gl/uj5RCD``        ``// for details of Arrays.binarySearch()``        ``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]+ ``" "``);``    ``}`` ` `    ``// Driver code``    ``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);``    ``}``}`` ` `// This code is contributed by Swetank Modi`

Output :
```50 45 84
```

Time Complexity : O(n Log n) for sorting.
Auxiliary Space : O(n)

My Personal Notes arrow_drop_up