2016-04-29 9 views
-1

私はいくつかの制約を受け、インタビューで以下のチャレンジを得ました。JavaScriptチャレンジ - シャーロックとアレイ

ワトソンは、シャーロックの配列Aの長さをNにします。次に、左の要素の合計が右の要素の合計と等しくなるように要素に配列の要素が存在するかどうかを判断するように求めます。左/右に要素がない場合、合計はゼロとみなされます。正式には、 A1+A2...A(i−1)=A(i+1)+A(i+2)...ANのようにiが見つかります。

入力形式

最初の行はT、テストケースの数を含んでいます。各テストケースについて、最初の行にはN、配列Aの要素数が含まれています。各テストケースの2行目には、N個の空白で区切られた整数が含まれており、配列Aを示しています。各テストケース印刷YESについて

出力フォーマット

は、アレイ内の要素が存在する場合、その左の要素の和は、その右側の要素の和に等しくなるように。そうでない場合はNOを印刷します。

制約

1≤T≤10 

1≤N≤10^5 

1≤Ai≤2×10^4 

1≤i≤N 

私は私のコーディングの落とし穴を知ってほしい、私はそれを解決してきたが、それはいくつかのテストケースに失敗しています。私はほとんど4〜5時間を過ごしましたが、それを解決することはできません。

function processData(input) { 
    input = input.split('\n'); 
    var counter=0; 
    var sum = function(n){ 
     var r=[]; 
     for(var k=0;k<n.length;k++){ 
      if(!isNaN(n[k])) { 
       if(n[k] >= 1 && n[k] <= (2 * Math.pow(10,4))){ 
        r.push(n[k].trim()); 
       } 
      } 
     } 
     return r.reduce(function(a, b) { return Number(a) + Number(b); }, 0); 
    } 
    for(var i=2;i<=input.length;i+=2){ 
     var ret='NO'; 
     if(counter<=10){ 
      input[i] = input[i].split(' '); 
      if(input[i].length <= Math.pow(10,5) && input[i-1] <= input[i].length && input[i-1] >= 1){ 
       for(var j=0;j<input[i].length;j++){ 
        if(sum(input[i].slice(0,j)) === sum(input[i].slice(j+1,input[i].length))){ 
         ret = 'YES'; 
         break; 
        } 
       } 
      } 
     } 
     counter++; 
     console.log(ret); 
    }; 

} 

process.stdin.resume(); 
process.stdin.setEncoding("ascii"); 
_input = ""; 
process.stdin.on("data", function (input) { 
    _input += input; 
}); 

process.stdin.on("end", function() { 
    processData(_input); 
}); 

チャレンジリンク - -

私のソリューションですhttps://www.hackerrank.com/challenges/sherlock-and-array

+0

を? –

+0

このようなひどいインタビューの質問。 – mkaatman

+0

@ダニエルA.ホワイトそれは私が持っていないので、インタビューです。 –

答えて

1

私は簡単に自分の携帯電話上のコードを記述することはできませんが、ここで私の解決策のアイデアです。私はキーボードで一度適切な編集を行います。

入力ファイルの解析が簡単であることを認めましょう。次に、1つの配列に対してyesまたはnoを返す関数を記述するだけです。

ステップ1:LeftSum

ステップ3:もしLeftSumをアレイ上のループと要素の部分和を維持:TotalSim

ステップ2:それの要素の総和を取得するために配列を削減=== TOTALSUM - はい

STEP 4返すLeftSum:配列の末尾:JavaScriptで整数は、あなたの制約がオーバーフローが発生しないことを保証することを意味し、2^53 -1まで正確であることを偽

をないしてくださいリターンを

+0

あなたの答えをありがとう。私は同じようにしました。 –

+0

私はスプライス/スライスまたは中間配列(あなたが必要ではない)の呼び出しでエラーが発生していると思います。 –

+0

スライスでは、正しい配列と左の配列を作成しています。 Callengeのリンクhttps://www.hackerrank.com/challenges/sherlock-and-array –

0

ケースを反復して、それぞれのケースで最初の要素が一致するかどうか調べます。要素の両側でreduceを実行し、結果が一致するまで、または要素がなくなるまで結果を比較します。

この作業をする必要があります:あなたのテストです

let test = input => input 
    .map(line => line 
     .some((el, index) => line.slice(0, index).reduce((p, c) => p + c, 0) 
      === line.slice(index - line.length + 1).reduce((p, c) => p + c, 0))) 
    .map(result => result ? 'YES' : 'NO'); 

test(cases); // outputs array of YESs and NOs