Професионална програма
Loading...
+ Нов въпрос
Antonio97 avatar Antonio97 13 Точки

04. Rotate Array / Arrays and Matrices

Здравейте, на тази задача всички тестове ми минават, без последния. Не му стига времето за него и дава "Недостатъчно време". Някой сблъска ли се с този проблем? Това е моят код на задачата - http://pastebin.com/C68TMAVC

Благодаряsmiley

Тагове:
0
Module: JS Advanced
Janislav avatar Janislav 154 Точки
Best Answer

Трябва да направиш малка промяна във for цикъла:

for (let i = 0; i < rotations % input.length; i++) {
        input.unshift(input.pop());
}

Така не се правят излишни завъртания пример:
Масив от [1, 2, 3, 4, 5] да се завърти 5 пъти (При завъртане на масивът 5 пъти той остава непорменен)
input.length = 5
rotations = 5
rotations(5) % input.length(5) = 0
Така не се правят излишни завъртания и няма да гърмми за време


 

2
Antonio97 avatar Antonio97 13 Точки

Получи се. Благодаря много!

0
Nikola_Andreev avatar Nikola_Andreev 668 Точки

На последния тест подава много голямо число и затова ти дава Time Limit. Реално погледнато ако числото е 1001 , дали ще завъртиш цикъла 1001 пъти или само 1, резултата ще е еднакъв и правиш 1000 излишни завъртания. 

0
Antonio97 avatar Antonio97 13 Точки

Сега проверих и мисля, че не е така. При завъртането на 1 път и при завъртането на 1001 пъти се получават два различни резултата. Може ли да ми помогнете по някакъв начин, защото тотално зациклих и не мога да измисля как да стане задачата?

0
masive avatar masive 3 Точки

Много благодаря за подсказката.

В началото направих проверка на бороя ротации и ако са над 1000 ги редуцирам ( ротации % 1000) при 1001 става 1.

При мен сработи.

0
06/10/2016 11:55:41
butanfire avatar butanfire 32 Точки

Привет,

Да прави си, защото завъртанията зависят от размера на масива, пример :
Нагледно показвам :
Давам 6 завъртания да се направят за 1 2 3
1.    3 1 2
2.    2 3 1
3.    1 2 3
Виждаш ли, че третият резултат е същият като началният?
Това е защото цифрите се извъртат и стигат началното състояние (демек броя ротации на масива е колкото размера на масива, такава е зависимостта)
И затова се ползва модуларно деление, за да го завъртиш само (като в нашият пример) 1 или 2 пъти.
А теста сигурно е дадено число 10 000 и програмата дали работи N пъти по-бързо ако му смалиш броят операции? :)

Поздрави,
Владо

0
MKrusharska avatar MKrusharska 1 Точки

Трябва да сметнеш оптималния брой ротации, които зависят от дължината на масива:

 let usefulRotations = requiredRotations % arr.length;

 

Задачата:

function rotateArr(arr) {

  let requiredRotations = Number(arr.pop());

  let usefulRotations = requiredRotations % arr.length;

  for (let i = 0; i < usefulRotations; i++) {

    arr.unshift(arr.pop());

  }

  console.log(arr.join(" "));

}

 

rotateArr(["Banana", "Orange", "Coconut", "Apple", "15"]);

0
19/09/2020 15:28:01