2016-09-22 2 views
1

У меня есть массив и длинная переменная типа total, что означает ее сумму.Оптимизация в сумме массива в java

Если массив длины п, то суммирование это должно быть сделано так: sum = arr[0] + arr[n-1] + arr[1] + arr[n-2] +... до sum >= total и я должен напечатать строку элементов в сумме

Мой подход: Я выполнил цикл до n/2, если n равно или n/2 + 1, если n нечетно.

я делать что-то вроде этого:

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} и общее = 120, то вывод должен быть:

10 50 20 40 

мой подход неподвижных дает TLE в некоторых тестовых случаях. Мне нужно больше оптимизированного решения, чем это. Помогите мне здесь.

+2

Что такое TLE? И как «проверка» прерывает цикл? Выбрасывает исключение? – 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

Упрощенный. Из интереса, делают ли онлайн-судьи «i ++» над «++ i'? – Bathsheba

+1

@ Bathsheba почему они должны в Java на целых числах? – xenteros

+0

@ Батшеба, это наверняка было бы экстремизмом. – 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); 
    } 

надежда, что поможет вам.

Смежные вопросы