2016-09-22 8 views
1

私は配列と、その合計を表すtotalという長い型の変数を持っています。 sum >= totalまで sum = arr[0] + arr[n-1] + arr[1] + arr[n-2] +...と私はサムの要素Javaの配列の合計での最適化

私のアプローチの文字列を出力する必要があります:

配列は、長さであるnは、それの合計は次のように行われるべきである場合 私が実行していますnが偶数の場合はn/2までループし、nが奇数の場合はn/2 + 1までループします。

私はこのような何かをしています:

String s = ""; 
if (n % 2 ==0) 
    loop = n/2; 
else 
    loop = n/2 + 1; 

for(int i=0 ; i < loop ; i++){ 
    sum += arr[i]; 
    s += arr[i] + " "; 
    if(check(sum , total)==true) break; //this function checks if sum>=total. 
    sum += arr[n]; 
    s += arr[n] + " "; 
    if(check(sum , total)==true) break; 
    n--; 
} 
System.out.println(s); 

例:[] = {10、20、30、40、50} ARRと合計= 120、出力は次のようになります。

10 50 20 40 

私のアプローチstillsは、いくつかのテストケースでTLEを与えます。私はこれよりも最適化されたソリューションが必要です。私を助けてください。

+2

TLEとは何ですか?そして、 'check'はどのようにループを壊していますか?それは例外を投げていますか? – Eran

+0

TLEは期限を超えています。 –

+0

TLEは時間制限を超えており、例外をスローしません。 –

答えて

3

なぜこのようことを行うにはありません。

for (int i = 0; sum < total && i < loop; i++) { 
    sum += array[i]; 
    System.out.print(String.valueOf(array[i]) + " "); 
    if (sum < total) { 
     sum+=array[n-1-i]; 
     System.out.print(String.valueOf(array[n-1-i]) + " "); 
    } 
} 
+0

Upvoted。興味のないところでは、オンラインジャッジは「+++」以上に「+++」をペナルティするか? – Bathsheba

+1

@Bathshebaなぜ彼らはJavaで整数ですべきですか? – xenteros

+0

@Bathsheba、それは確かに極端になるでしょう。 – ChiefTwoPencils

0

はあなたがtratementを行う最初のあなたのアレイを整理することができます。このような何か:あなたを助ける

public static void orgArray(string tab[]) { 
     int longueur = tab.length; 
     int tampon = 0; 
     boolean permut; 

     do { 

      permut = false; 
      for (int i = 0; i < longueur - 1; i++) { 

       if (i + 1 < longueur - 1 - i) { 

        tampon = tab[i + 1]; 
        tab[i + 1] = tab[longueur - 1]; 
        tab[longueur - 1] = tampon; 
        permut = true; 
       }else {permut = false;} 
      } 
     } while (permut); 
    } 

希望:

String s = ""; 
orgArray(arr); 

for(int i=0 ; i < (arr.lenght)-1; i++){ 
    sum += arr[i]; 
    s += arr[i] + " "; 
    check(sum , total); 
} 
System.out.println(s); 

と機能は次のようないくつかのことになります。