📅  最后修改于: 2023-12-03 14:57:47.615000             🧑  作者: Mango
给出一堆整数,求其中最大的K个数。
可以使用快速选择算法来解决该问题。快速选择算法是基于快速排序算法的思想,它可以在平均时间复杂度为 O(n) 的时间内求出第 K 大的数。
具体实现方法如下:
def quick_select(nums, k):
pivot = nums[-1]
left, equal, right = [], [], []
for num in nums:
if num < pivot:
left.append(num)
elif num == pivot:
equal.append(num)
else:
right.append(num)
if len(right) >= k:
return quick_select(right, k)
elif len(right) + len(equal) >= k:
return equal[0]
else:
return quick_select(left, k - len(right) - len(equal))
nums = [3, 6, 9, 1, 2, 5, 8, 4, 7]
k = 3
result = []
for i in range(k):
result.append(quick_select(nums, len(nums)-i))
print(result)
该代码片段可以求出给定数组中最大的 k 个数,对于输入的 nums=[3, 6, 9, 1, 2, 5, 8, 4, 7], k=3,输出为 [9, 8, 7]。