2017-07-26 31 views
1

排序列表的問題是:在Python(一種方式)

輸入正整數數組,需要用條件返回新數組所有元素的總和:如果Array[i] > Array[j]然後Array[i] = Array[i] - Array[j]。 例子:

[1,2,3] => [1,2,1] => [1,1,1] => output: 3 

我的代碼:

def solution(a): 
    while max(a) != min(a): 
     u = max(a) 
     a[a.index(u)] = u - min(a) 
    return (a[0] * len(a)) 

但這種代碼是很慢的,我怎麼能重構它有更好的表現?

+2

您是否正在手動執行此操作?換句話說,你不想使用'sorted'?因爲你使用'max'和'min',但不是'sorted'有點*有趣。 – idjaw

+0

'min','max'和'index'是'O(n)',這就是代碼變慢的原因。 – ForceBru

+0

如何使用這種條件對此數組進行排序? –

回答

2

您實現的代碼大致將Euclidean algorithm應用於一組數字。下面的代碼就相當於你的,但更有效:

from fractions import gcd 

a = [1, 2, 3] 
print reduce(gcd, a) * len(a) # 3 

無論你的代碼做你想要做的是另外一個故事。在Python 3.X中,必須從functools導入reduce

+0

謝謝。 Python中有多少工具我不知道。你的代碼完美工作 –