# Find k maximum elements of array in original order

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

*chevron_right*

*filter_none*

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

*chevron_right*

*filter_none*

Output :

50 45 84

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

Auxiliary Space : O(n)

## Recommended Posts:

- Print n smallest elements from given array in their original order
- Generate original array from an array that store the counts of greater elements on right
- Generate original array from difference between every two consecutive elements
- Recursive Programs to find Minimum and Maximum elements of array
- Maximum sum by picking elements from two arrays in order
- Maximum sum of increasing order elements from n arrays
- Print elements of an array according to the order defined by another array | set 2
- Sum of elements in 1st array such that number of elements less than or equal to them in 2nd array is maximum
- Maximum array from two given arrays keeping order same
- Rearrange all elements of array which are multiples of x in increasing order
- Rearrange all elements of array which are multiples of x in decreasing order
- Print array elements in alternatively increasing and decreasing order
- Sort the linked list in the order of elements appearing in the array
- Shortest path to traverse all the elements of a circular array in increasing order
- Maximum in array which is at-least twice of other elements

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.