@Quintis

Как ускорить функцию?

Есть рабочая функция для задачки с codewars - https://www.codewars.com/kata/5672682212c8ecf83e000050

function dblLinear(n) {
  // your code
  let uArray = [1, 3, 4];

  let currentPosition = 1;

 while (currentPosition <= n) {
    let x = uArray[currentPosition];
    let y = 2 * x + 1;
    let z = 3 * x + 1;
    uArray.push(y, z);
   uArray = [...new Set(uArray),y,z]
  uArray = uArray.sort((a, b) => a - b);
   currentPosition++
 }
return uArray[n]
}

Работает нормально но на тестах выбивает ошибка по ограничению времени -
Execution Timed Out (12000 ms)

Как ее ускорить ?
  • Вопрос задан
  • 264 просмотра
Пригласить эксперта
Ответы на вопрос 1
vabka
@vabka
Токсичный шарпист
Придумать более оптимальный алгоритм.

Например тут точно можно избавиться от:
1. Set
2. Реаллокации массива
3. Сортировки массива
4. Лишних вычислений
Как-то так например
const seq = [1];
let upper = 0;
let lower = 0;
const dblLinear = n => {
    while (n >= seq.length) {
        const y = seq[lower] * 2 + 1;
        const z = seq[upper] * 3 + 1;
        if (y < z) {
            seq.push(y);
            lower += 1;
        }
        else {
            seq.push(z);
            upper += 1;
        }
    }
    return seq[n];
}

Ещё можно оптимизировать, если хранить не всю последовательность, а только то, что нужно для вычисления следующих чисел.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы