2016-08-05 12 views
0

私は初心者です。私は、この問題に関して、私のコードがすべての/ほとんどのテストケースを満たすことに失敗したことに気づいた。テストケースが満足できない

質問:

番号の配列が与えられると、最小と最大の要素が同一である非空サブアレイの数を見つけます。

例:

入力:配列= [1、1,3]

出力:4

説明:

必要なサブ配列は[1]、[1]、[3]、[1,1]

私のソリューション:

は配列をソートし、問題を解決します。

コード:

for(int i = 0; i < testCases; i++){ 
     int arraySize = in.nextInt(); 
     int array[] = new int[arraySize]; 
     for(int j = 0; j < arraySize; j++){ 
      array[j] = in.nextInt(); 
     } 
     temp[i] = (findSubArrays(array)); 
} 
for(int i = 0; i < testCases; i++){ 
     System.out.println(temp[i]); 
} 

private static int findSubArrays(int[] array) { 
    Arrays.sort(array); 

    //Since each element can form a sub-array of its own 
    int noOfSubArrays = array.length; 

    for(int i = 0; i < array.length-1; i++){ 
     if(array[i] == array[i+1]){ 
      noOfSubArrays++; 
     } 
    } 
    return noOfSubArrays; 
} 
+0

誰が並べ替えについて何を言ったのですか? – shmosel

+0

並べ替えに関して、私はそれが起こらなければならないどこに指定されて表示されません。おそらくサブアレイ内の数字の順序は関係がないと指定されていますか?それとも反対ですか?それが明記されていない場合、私はあなたが順序を変更することは許されていないと仮定し、各サブ配列内の順序が重要であると考えます。意味[6,8,7]は[6,7,8]と同じとはみなされません。 –

+0

サンプルの入出力がありますか、またはテストする場所はありますか? – shmosel

答えて

0

だからあなたはあなたがネストされたトラバーサルを必要としない隣接点と終了点を開始し維持するための配列をソートしています。それは理にかなっている。問題は隣接する複製を数えていることですが、実際に必要なのはT(n)、または連続する複製の三角形の数です。あなたのアルゴリズムは5を返しますが、(スタート&終了インデックスによる)6つのサブセットが実際に存在し

[1, 1, 1] 

0, 0 
0, 1 
0, 2 
1, 1 
1, 2 
2, 2 

それでは、それぞれの三角形の数を計算するためのアルゴリズムを更新してみましょう簡単なシナリオを考えてみましょうシーケンス:

private static int findSubArrays(int... array) { 
    Arrays.sort(array); 

    int sequenceCount = 0; 
    int total = 0; 
    for (int i = 0; i < array.length + 1; i++) { 
     if (i == array.length || (i > 0 && array[i] != array[i - 1])) { 
      total += triangle(sequenceCount); 
      sequenceCount = 0; 
     } 
     sequenceCount++; 
    } 
    return total; 
} 

private static int triangle(int n) { 
    return (n * (n + 1))/2; 
} 

今すぐfindSubArrays(1, 1, 1)戻り6とを呼び出しますは4を返します。

+0

ありがとう@shmosel。私は本当にあなたの助けに感謝します。そして、私のアルゴリズムは、2ではなく5を返す。ちょうど言っている。何も個人的ではありません:) – Raghav

+0

@Raghav、はい私はすでにそれを修正しました。 – shmosel

+0

どのように三角関数にヒットしましたか?私は何時間も考えていましたが、うまくいきませんでした。 – Raghav

関連する問題