2016-11-01 1 views
0

私は、Codilityで提示された平衡問題を解決しようとしています。私は解決策を書いた(恐らく最も効率的なものではないが、これは単に運動目的のためである)。このソリューションは私のPCで動作しますが、Codility環境でエラーを返します。これはどのように可能ですか?私はどこでミスをしていますか?python - 配列の平衡を見つけるエラー - エラー

The problem


低いインデックスでの要素の合計がより高いインデックスでの要素の和に等しくなるように配列の平衡インデックスを検索します。

マイソリューション

A=[-1, 3, -4, 5, 1, -6, 2, 1] 

def solution(A): 

    results=[] 
    n=len(A) 
    P = [0] * (n) 
    P[0] = A[0] 
    for k in xrange(1, n): 
     P[k] = P[k - 1] + A[k] 


    for p in xrange(1,n): 
     if P[p-1]==P[n-1]-P[p-1]-A[p]: 
      results.append(p) 


    if len(results) <> 0: 
     return results 
    else: 
     return -1 

コンパイルに成功。例テスト:[-1,3,4,5,1、-6,2,1] 出力(stderr):無効な結果のタイプ、intが必要です。 が見つかりました。ランタイムエラー(テストされたプログラムが予期せず終了しました)

+0

配列内の最初または任意の平衡値のインデックスを返します。あなたは 'results'でリストを返しています。 – choz

+0

いいえ。たとえば、 'A = [-1,3,4,5,1、-6,2,1]'、 '3'は平衡値です。 '3 'のインデックス、' 1'を返す必要があります。 'A [1]は3 'なので。 – choz

+0

@ choz 3,5,1または[3,5,1]のようなもの? – Chris

答えて

2

すべての場合に整数を返すはずですが、コードによってはリストが返される場合もあれば、-1が返される場合もあります。

アルゴリズムの説明が解決策が一意でない場合を考慮していないように見えるので、あなたはちょうど最初の結果を返すかもしれないと思います。だからreturn resultsの代わりにreturn results[0]を修正する可能性があります。

+0

'results [0]'。値を含んでいます。彼は値ではなく元のリストのその値のインデックスを返します。 – choz

+0

@choz 'results [0]'は値を含んでいません。範囲1のインデックス 'p'を' len(A) 'に変換しています。たぶんあなたは小文字の 'p'と大文字' P'を混同していますか? – jadsq

+0

あなたは正しいです。私の悪い..私はPythonに堪能ではありません。 – choz

関連する問題