我想编写一个带有两个参数的函数returnMlargest
:列表L
和数字m
。它返回该列表中m
个最大的数字。假设列表中的所有元素都不同。
例如,如果我returnMlargest([6,2,5,4,3,7], 4)
,
它将返回该列表中的第4个最大元素,即4。
如果我先对列表进行排序,我知道如何编码。但是,我想知道如何在不对列表进行排序的情况下执行此操作。我必须为此编写一个while循环或嵌套循环。
请!这不是作业或作业!这是决赛的练习测试!我知道我是编程中的菜鸟,因为我的问题可能不太好。但是嘿!人不是天生就是编程天才!
答案 0 :(得分:1)
为了帮助你,这里有一些伪代码
def return_m_largest(a_list, m):
make a copy of a_list # unless it's okay to mutate the list
for _ in range(m - 1):
find the max and get rid of it
return the highest number in the list
对于大型列表来说这将是非常低效的,但是我怀疑这是家庭作业,它可能不会用非常大的列表进行测试。但是,如果你能够实现这一点,你应该能够根据你的需要进行优化。
答案 1 :(得分:0)
首先,我会说排序列表是最有效的方法。
但是,如果你想使用两个循环,你可以这样做:
int returnMlargest(int[] array, int m){
int tempLargest, indexLargest;
for(int x=0; x < m ; x++){ //remove m-1 of the largest elements
tempLargest = indexLargest = 0; //reset largest counter
for(int y=0; y< array.length; y++){
if(array[y] > tempLargest){
tempLargest = array[y];
indexLargest = y;
}
}
if( x == m - 1)
return tempLargest; //result found
//remove largest value from array, and repeat
}
}
答案 2 :(得分:0)
def returnMlargest(l, M):
cc = compile(';'.join(['list.remove(l, max(l))']*M), 'abc', 'single')
eval(cc)
for i in range(1):
for i in range(1):
pass
return max(l)
returnMlargest([1,2,4,3,7,6,5],3) 4
NB。 * M * th最大值使用基于0的计数,因此在我的示例中, 7 是第0个最大数字,因此 4 是第3个最大数字。
它没有明确地对列表进行排序,它在技术上包括一个嵌套循环(虽然它可能会被优化掉)。
这不是一个家庭作业的答案(它会失败),这是一个练习答案,因为我从未使用过&#39;编译&#39;之前和eval()
不会直接在多行语句上工作。
你的问题的真正答案也包含在我的答案中。 I want to know how can I do it without sorting the list
以及look for the largest number and get rid of it, M times over
。