2016-05-10 6 views
-1

これは、有名な連続和問題の私自身の修正です。ネストされたサブアレイのPythonで配列が与えられた場合、どのようにして最大の合計を持つサブアレイを最適に返すことができますか?私はこのO(n)実装を試してみましたが、これは常に最後のサブ配列を与えてくれましたが、なぜそれが見えません。python入れ子リスト:最大の和を持つ部分配列を返します

def maxsublist(arr): 
    curr = sum(arr[0]) 
    ind = 0 
    for i,j in enumerate(arr): 
     if sum(j)>curr: 
      ind = i 
    return arr[ind] 

maxsublist([[1,2],[4,5],[5,96,1],[1,2,3]]) 

[1,2,3]を返します。

***注:私はPythonのソートされた関数を使って、より良いバージョンを持っていますが、これはちょっと騙されるように感じます。

def maxsublist2(arr): 
    sortedlists = sorted(arr, key= lambda x: sum(i for i in x)) 
    return sortedlists[-1] 
+0

あなたの関数がうまくいかないのは、 'curr = sum(j)'を決してループの中に設定しないためです。 –

答えて

1

あなたはその合計の現在の値よりも大きい配列を見つけたときcurrを更新する必要があります。

if sum(j) > curr: 
    ind = i 
    curr = sum(j) 

ところで、あなたは合計していないために、sum(j)を保存するために、いくつかのローカル変数を作成することができます同じことを二度。

+0

ありがとう!私はそれを逃してはいけません。 – michel

3

これは、連続した合計の問題のようには思えません。これは十分なはずです:あなたのコード内

max(arr, key=sum) 

エラーは、indと同時にcurrを更新するのを忘れ、単にということです。

+0

@michekあなたが何を意味するのか分かりません。あなたが間違っていたことを指摘する答えを更新しました。 –

関連する問題