2016-09-22 51 views
1

我有一个数组和一个称为total的长类型变量,它代表它的总和。java中数组的总和优化

如果数组的长度为N,则它的总和应该做这样的: sum = arr[0] + arr[n-1] + arr[1] + arr[n-2] +...直到sum >= total,我要打印元件串在

我的方法的总和: 我已经执行如果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); 

实施例:ARR [] = {10,20,30,40,50}和总= 120然后输出应为:

10 50 20 40 

我的方法依然在一些测试案例中给出了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。出于兴趣,在线法官是否通过'++ i'惩罚'i ++'? – Bathsheba

+1

@Bathsheba他们为什么应该在Java中使用整数? – xenteros

+0

@Bathsheba,肯定会是极端主义。 – ChiefTwoPencils

0

你可以先整理你的阵列做tratement。是这样的:

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); 

和功能会有些事情是这样的:

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); 
    } 

希望帮助你。