2017-02-16 5 views
1

は、私は、問題の解決策を最適化する助けをしたい、私はすでに問題を整理、私のコードは大きな配列を処理するための十分ではありません - codeWars : Sum of Pairs - problemは、ペアの合計のソリューションの最適化:Codewars

はこちら私のコード -

var sum_pairs=function(e, sum){ 

var result=null; 
var arrLen=e.length; 
for(let i=0;i<arrLen-1;i++){ 
    let nextIndex=e.slice(i+1,arrLen).indexOf(sum-e[i]); 
    if(nextIndex>=0){ 
    result=[e[i],e[nextIndex+1+i]]; 
    arrLen=nextIndex+1+i; 
    } 
} 
return result; 
} 

まあ、私はこれは良い解決策ではないことを知っています。とにかく、これはすべてのテストケースに合格しますが、大規模な配列に遭遇したときに失敗しました - Result On codewars

私はこのコードを最適化する方法を知りたいだけでなく、良いコードを書く方法も学びたいと思っています。

+0

リンクです - https://www.codewars.com/kata/sum-of-pairs/train/javascript –

+0

は( 'ここlink'がある - その(_trainであなたの質問の画像の参照を置き換えます/ の部分)。)問題はうまく定義されています:_earlier_のペアはいつの_出現の_の定義ですか?もしそれが最も遅いインデックスfirst_だったなら、あなたは、与えられた合計に合計する異なるインデックスに値があるかどうかを知る必要があります。インデックスの合計が最も低く、結び目を破る索引が最も低い場合は、よりスマートにする必要があります(ご自身でご質問にお答えください)。 – greybeard

+0

「このコードを最適化する方法を知りたい」 - - アルゴリズムは、大規模な配列を処理するためのものではありません。 「良いコードを書くためのテクニックを学びたい」と思ったのです。あなたは各インデックスを可能な最初のインデックスと見なします - 必然的に見えます。今のところ、ECMAScriptの 'slice'の複雑さを無視して、' indexOf(sum-e [i]) 'を使って各メンバーのクエリがどれくらい努力していますか?総努力?必要な結果は何ですか?そして、あなたの 'sum_pairs'はマッチしたペアが見つかったらどうしますか? (10,000,000のゼロの配列を想像してください、ゼロを合計してください) – greybeard

答えて

1

1つの解決策は、すべての準備が完了した番号を暗記するためにデータ構造を使用することです。次に、合計がsになっている場合は、各要素を調べることができます。この集合は、アルゴリズムを時間(および空間)において線形にする挿入および探索のための平均一定時間複雑度を有する。ここで

var sum_pairs=function(ints, s){ 
    if (ints.length < 2) return undefined; //not enough numbers for pair. 
    let intSet = new Set() 
    intSet.add(ints[0]); 
    for (let i=1; i < ints.length; ++i){ 
    let needed = s-ints[i]; 
    if (intSet.has(needed)){//check if we have already seen the number needed to complete the pair. 
     return [needed,ints[i]]; 
    } 
    intSet.add(ints[i]);//if not insert the number in set and continue. 
    } 
    return undefined;//No answer found 
} 
+0

3番目の例では、これは何か: 'sum_pairs([10、5、2、3、7、5]、10)'? – greybeard

+0

これはcodeWarsのすべてのテストに合格しますので、私は '[3,7]'と仮定します。 –

+0

驚くばかりですが、 'set'を使うのは素晴らしい考えです。ありがとう:) –

関連する問題