除了len()或range()之外,请不要内置插件.我正在读期末考试.
这是我的意思的一个例子.
def find_numbers(x, lst):
lst = [3, 8, 1, 2, 0, 4, 8, 5]
find_numbers(3, lst) # this should return -> (1, 6, 7)
Run Code Online (Sandbox Code Playgroud)
我没有完全尝试过这个......无法找出解决问题的最佳方法:
def find_K_highest(lst, k):
newlst = [0] * k
maxvalue = lst[0]
for i in range(len(lst)):
if lst[i] > maxvalue:
maxvalue = lst[i]
newlst[0] = i
Run Code Online (Sandbox Code Playgroud)
从列表中取出前3(x)个数字.最大值的最小值是这些.在你的情况下:3,8,1.他们的索引是(0,1,2).构建它们对((3,0),(8,1),(1,2)).
现在按最大值的大小对它们进行排序:((8,1),(3,0),(1,2)).
使用此初始List,您可以递归遍历列表的其余部分.将最小值(1,_)与列表中的下一个元素(2,3)进行比较.如果它更大(它是),将其排序到列表((8,1),(3,0),(2,3))并扔掉最小的.
一开始你在前三名中有很多变化,但是后来,它们变得罕见.当然,在遍历时,你还必须保留关于最后位置(3,4,5,......)的书.
前N个元素的插入排序应该非常高效.
这是Scala中的类似问题,但无需报告索引.