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 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 <bits/stdc++.h>` `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` ` ` `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[0]);` ` ` `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)