Description 现在有一大批规模为 n 的无序整数,需要请您找出前 m 大的数据。 Input 包含2行。 第一行:两个整数 n 和 m ,分别代表数据规模 n ,需要返回的数据规模 m 。 n 和 m 的取值范围[0,1000000] 第二行: n 个整数,每个数据的取值范围为[0,1000000] Output 规模数据中的前 m 大的数据,从大到小依次输出。 注意:只输出前 m 个数据即可。 Sample Input 10 3 96 36 18 98 42 96 89 78 96 92 Sample Output 98 9696
时间: 2024-03-18 15:41:06 浏览: 82
好的,这是一个经典的 Top K 问题。解决这个问题的方法有很多,以下是其中两种常见的方法。
方法一:快速排序
我们可以用快速排序的思想来解决这个问题。具体来说,我们可以先对整个数组进行一次快速排序,然后取出前 m 个元素即可。时间复杂度为 O(nlogn)。
方法二:堆排序
我们也可以使用堆排序来解决这个问题。具体来说,我们可以先建立一个大小为 m 的小根堆,然后遍历整个数组,对于每个元素,如果它比堆顶元素大,就把堆顶元素弹出并将这个元素插入堆中。最终,堆中的元素就是前 m 大的元素。时间复杂度为 O(nlogm)。
下面是第二种方法的代码实现,你可以把它交给 ChitGPT 帮你运行。
```python
import heapq
n, m = map(int, input().split())
nums = list(map(int, input().split()))
heap = []
for num in nums:
if len(heap) < m:
heapq.heappush(heap, num)
elif num > heap[0]:
heapq.heappushpop(heap, num)
ans = sorted(heap, reverse=True)
print(' '.join(map(str, ans)))
```
阅读全文