Sort Numbers Time limit exceeded

Здравейте.
Имам проблем с тази задача https://judge.telerikacademy.com/problem/00401sortednumbers
Може ли някой да ми подскаже, защо програмата ми е много бавна и не минава, нито един от тестовете ?
Не използвах конкатенация с ‘+’, а отделен метод уж да е по-бързо.
Ето кода:

let number = '',
array = new Array(),
outputLine = '';
 number = gets();
while (number !== undefined){
    number = number.replace(',', '');
    number = Number(number);
    array.push(number);
    number = gets();
}
array.sort(function(a, b){
    return b - a;
});
for (let i = 0; i < array.length; i = i + 1){
    if (i === array.length - 1){
        outputLine = outputLine.concat(array[i]);
    }
    else{
        outputLine = outputLine.concat(array[i]);
        outputLine = outputLine.concat(', ');
    }
}
print(outputLine);

Привет,
Входа на данните е на един ред, а не ред по ред във формат/1, 2, 5, 98, 67, …/.
Къде печатате резултата т.е. print(outputLine); ???

Проблема е, че не излизаш от някой от loop овете!
Това решение няма да работи никога защото
while (number !== undefined){ number = number.replace(',', ''); number = Number(number); array.push(number); number = gets(); }
number = gets() винаги след първото извикване ще ти връща undefined, защото input-а ти идва на един ред! Изобщо този while е много ненамясто и логиката вътре е греша за тази задача!
Използвай split, map, sort, и накрая сложи един join и можеш да я решиш на един ред!
Оставям ти сам да си го попълниш

print(gets().split().map().sort().join())
2 Likes

Привет, работи, ако се получава входа ред по ред, без предварително да се уточни броя на елементите i при последнито извикване когато не получи нещо, ще върне undefined от gets() или NaN от +gets(), но условието е друго :slight_smile:

На последния ред печатам стринга.
Пропуснал съм да го постна тука.
Едитнах го.

Благодаря! :slight_smile:
Точно с това не съм се съобразил, че целия input го получавам само с един gets();

Отново ти казвам, че логиката е грешна за тази задача! Пренапиши си логиката from scratch и чети какво ти се дава и какво се очаква да върнеш.

Да, разбрах.
Имах предвид, че от input-a съм се объркал и съм тръгнал в друга посока и съм мазал яко след това :smiley:.

Здравейте !

Може ли някой разбиращ да ми помогне ?
Не знам как да разделя стойностите накрая със запетайка и празно място .
`
Scanner sc = new Scanner(System.in);

String input = sc.nextLine();

String [ ] inputArray = input.split(", ");

int [ ] array = new int[inputArray.length];

for (int i = inputArray.length-1; i >=0; i--) {

   array [i] =Integer.parseInt(inputArray[i]);

     System.out.print(array [i]);        
}`

И изобщо има ли смисъл да се парсва ?
Ако не , пак същия въпрос - как се разделят стрингове ?

@voxa добавих:

  1. преди цикъла
    Arrays.sort(inputArray);
  2. в цикъла:
    if (i > 0) {
    System.out.print(array[i] + ", ");
    } else {
    System.out.print(array[i]);
    }

но нещо judge не дава положителен разултат

тук е обяснено как можеш да join -неш.

1 Like

Задачате е за JavaScript :slight_smile:

@voxa
Аз писах в отделна тема, че contest-a не приема решения с Java.
Вече е оправено и judge приема решения с Java.
Опитай сега.

Здравей, отново !
Ще дадеш ли едно рамо ? Защо при стойности в масива над 9 , се извежда входния масив ?

Scanner sc = new Scanner(System.in);

  String input = sc.nextLine();

  String [ ] inputArray = input.split(", ");

  int [ ] array = new int[inputArray.length];

  Arrays.sort(inputArray);

  for (int i = inputArray.length-1; i >=0; i--) {

      array [i] =Integer.parseInt(inputArray[i]);

      if (i> 0) {
          System.out.print(array[i] + ", ");
      } else {
          System.out.print(array[i]);
  }
  }

@voxa промени типа на масива и изнеси парсването в отделен цикъл:
Integer[] array = new Integer[inputArray.length];

for (int i = 0; i < inputArray.length; i++) {
  array[i] = Integer.parseInt(inputArray[i]);
}

принтирането на сортирания масив е същото :wink: Драсни ако се е получили или не :wink:

Мина… Благодаря !

1 Like