Python Program to 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 replace it with minus infinite (-1*sys.maxsize for largest minimum value in Python) 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).
- Python3
Python3
# Python program to find k maximum elements # of array in original order # import the module import sys # Function to print k Maximum elements def printMax(arr, k, n): brr = [ 0 ] * n crr = [ 0 ] * n # Coping the array arr # into crr so that it # can be used later for i in range (n): crr[i] = arr[i] # Iterating for K-times for i in range (k): # Finding the maximum element # along with its index maxi = - 1 * sys.maxsize for j in range (n): if (maxi<arr[j]): maxi = arr[j] index = j # Assigning 1 in order # to mark the position # of all k maximum numbers brr[index] = 1 arr[index] = - 1 * sys.maxsize for i in range (n): # Printing the k maximum # elements array if (brr[i] = = 1 ): print (crr[i],end = " " ) # Driver code arr = [ 50 , 8 , 45 , 12 , 25 , 40 , 84 ] n = len (arr) k = 3 ; printMax(arr, k, n) # This code is contributed by Pushpesh Raj. |
50 45 84
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.
- Python3
Python3
# Python3 program to find k maximum elements # of array in original order # Function to print Maximum elements def printMax(arr, k, n): # vector to store the copy of the # original array brr = arr.copy() # Sorting the vector in descending # order. Please refer below link for # details brr.sort(reverse = True ) # Traversing through original array and # print all those elements that are # in first k of sorted vector. for i in range (n): if (arr[i] in brr[ 0 :k]): print (arr[i], end = " " ) # Driver code arr = [ 50 , 8 , 45 , 12 , 25 , 40 , 84 ] n = len (arr) k = 3 printMax(arr, k, n) # This code is contributed by SHUBHAMSINGH10 |
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!