Algorithm 求n个数列表中m个最小数的算法

Algorithm 求n个数列表中m个最小数的算法,algorithm,Algorithm,我必须写一个算法来找到“n个数列表中的m个最小数”。我不明白这句话的意思。我必须在列表中找到所有最小的数字并打印出来吗。例如,如果我有一个包含4个元素[10,20,30,40]的列表,我是否必须每次打印一次小于40的每个数字。还是有什么别的意思让我无法理解 我的理解是,您必须编写一个函数,将一个数字m作为参数,并返回一个数字数组,该数组的大小为m,包含m个最小的数字。 举个例子,如果我们说m是2,我们将返回一个由2个元素组成的数组,其中包含2个最小的元素:[10,20] 如果我们将m设置为3,函

我必须写一个算法来找到“n个数列表中的m个最小数”。我不明白这句话的意思。我必须在列表中找到所有最小的数字并打印出来吗。例如,如果我有一个包含4个元素[10,20,30,40]的列表,我是否必须每次打印一次小于40的每个数字。还是有什么别的意思让我无法理解

我的理解是,您必须编写一个函数,将一个数字m作为参数,并返回一个数字数组,该数组的大小为m,包含m个最小的数字。
举个例子,如果我们说m是2,我们将返回一个由2个元素组成的数组,其中包含2个最小的元素:
[10,20]


如果我们将m设置为3,函数将返回
[10,20,30]

他们的问题是:给定n个数字的列表,找到m个最小的数字。如果n=10,m=5,列表如下:

 Input: 1 4 2 6 3 6 2 4 6 1
Output: 1 1 2 2 3
这个问题的解决方案是用n个数字集合中的前m个数字填充max堆。然后,检查列表中剩余的n-m个数字,并与max堆的max进行比较。如果列表中的数字小于最大值列表中的最大值,请从最大值列表中删除最大值,并将其替换为列表中的当前数字。重复此操作,直到检查完所有数字,然后返回m堆中的项目


这种方法的复杂性是O(nlogm),因为在使用第一个m来初始化最大堆之后,可能会对列表中的每个(n-m)元素执行一次删除和一次插入操作。

所以这就是m的意思。我现在明白了。谢谢,欢迎光临。您可以通过单击答案旁边的复选标记将我的答案标记为“已验证”,以将其从灰色切换为已填写,如果我有帮助;)为什么不快速选择,即
O(n)
?@Evg Quickselect会破坏原始列表。除非你复印一份。堆选择不可用。OP没有说是否允许他修改原始列表。