Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Интересное задание codewars.com (https://javascript.ru/forum/misc/73461-interesnoe-zadanie-codewars-com.html)

Alexandroppolus 04.08.2018 10:36

N указано, или это максимальный элемент в массиве?

j0hnik 04.08.2018 10:41

Alexandroppolus,
н не указано, длинна максимальная до 30.000.000
есть метка 1 <= кол-во пропущенных <= 10
но встречалось и больше почему-то. :(

Malleys 04.08.2018 10:53

Вот так проскочило:
function missNumsFinder(arr) {
  const present = new Array(arr.length), result = [];

  for(let i = 0, { length } = arr; i < length; ) {
    present[arr[i++]] = true;
  }

  for(let i = 1, { length } = present; ; ) {
    while(i in present) i++;
    if(i >= length) break;
    result.push(i++);
  }

  return result;
}


Изначально у меня было
const present = [], result = [];
Но если там около 30000000 раз добавлять новые индексы, то массив меняет свой размер (меняются внутренние свойства, что приводит к очень долгому вычислению и изменению внутреннего состояния массива)

j0hnik 04.08.2018 11:01

Malleys,
так не проходит, до 30.000.000 там 2 теста, это решение крайне редко успевает первый выполнить.
эта ката (Hardcore version)
м.б. вы решали без этой метки?

j0hnik 04.08.2018 11:06

Malleys,
а вот, Вижу, у вас прокатило. а с какой попытки?

Malleys 04.08.2018 11:17

Когда было `const present = [], result = [];`, то всегда не хватало времени, когда поменял на `const present = new Array(arr.length), result = [];`, то через один-пару раз проходит, иногда много раз не проходит, иногда больше проходит, чем не проходит...

j0hnik 04.08.2018 11:21

Malleys,
:)

Alexandroppolus 04.08.2018 11:23

Может, попробовать Uint8Array ?

j0hnik 04.08.2018 11:31

Alexandroppolus,
есть такая тема :)

j0hnik 04.08.2018 12:21

рони,
ваше решение будет стабильно проходить если:

for (var c = Array(b.length).fill(0), a = 0; a < b.length; a++) c[b[a]] = true;

без .fill(0) борода! вот такой парадокс


Часовой пояс GMT +3, время: 12:39.