我最好用示例來解釋
假設我有一個列表[6,3,5,1,4,2]。在列表中獲取少於特定元素的最小元素的最快方法
從索引0開始,找到比該索引處的值更小(尚未標記)的所有項目。
Index 0: [6,3,5,1,4,2]
Elements less than 6: 5{3,5,1,4,2}
Visited array: [1 0 0 0 0 0]
Index 1: [6,3,5,1,4,2]
Elements less than 3: 2 {1,2}
Visited array: [1 1 0 0 0 0]
Index 2: [6,3,5,1,4,2]
Elements less than 5: 3 {1,4,2}
Visited array: [1 1 1 0 0 0]
Index 3: [6,3,5,1,4,2]
Elements less than 1: 0 {NULL}
Visited array: [1 1 1 1 0 0]
Index 4: [6,3,5,1,4,2]
Elements less than 4: 1 {2}
Visited array: [1 1 1 1 1 0]
This yields an array as [5 2 3 0 1 0]
目前使用的,
def get_diff(lis):
ans=[]
for index,elem in enumerate(lis):
number_of_smaller=len(filter(lambda x:x<elem ,lis[index+1:]))
ans.append(number_of_smaller)
return ans
不過,我有一種感覺,這不會是有效的。我如何使它值得一個巨大的名單?我能聞到前綴總和嗎?謝謝,
*但是,我覺得這樣做效率不高。*你覺得這是什麼?你測試過了嗎? –
是的,長度爲10 ** 4的列表很容易會嘲笑我的代碼。目前的代碼雖然在我看來pythonic不夠快 –
你的算法的複雜度爲O(n²)。如果你想讓你的代碼更快,你需要使用不同的算法。 (我有一個解決方案,但這個餘量對我來說太小了。) –