Python程序以原始顺序查找数组的k个最大元素
给定一个数组 arr[] 和一个整数 k,我们需要打印给定数组的 k 个最大元素。元素应按输入的顺序打印。
注意: k 总是小于或等于 n。
例子:
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
方法1:我们在给定数组中搜索最大元素k次。每次我们找到一个最大元素时,我们打印它并用数组中的负无穷大(C 中的 INT_MIN)替换它。该方法的时间复杂度为 O(n*k)。
方法2:在这个方法中,我们将原始数组存储在一个新数组中,并按降序对新数组进行排序。排序后,我们将原始数组从 0 迭代到 n 并打印所有出现在新数组的前 k 个元素中的元素。对于搜索,我们可以进行二分搜索。
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
时间复杂度:O(n Log n) 用于排序。
辅助空间:O(n)有关详细信息,请参阅有关按原始顺序查找数组的 k 个最大元素的完整文章!