2677. Chunk Array - Leetcode (Easy). 30 Days of JavaScript | День 21 | Разбить массив на подмассивы

preview_player
Показать описание
📝 В этом видео мы продолжаем прохождение серии задач с платформы LeetCode "30 дней JavaScript". День 21 — Реализовать функцию, которая разбивает массив на подмассивы указанного размера. Рассмотрим 2 варианта решения этой простой задачи.

❗❗❗
Примечание для зрителей:

Я настоятельно рекомендую вам попробовать решить все задачи самостоятельно. Однако, если в какой-то из дней у вас возникнут трудности, вы всегда можете открыть этот плейлист и найти подробный разбор от меня. Надеюсь, мои объяснения помогут вам справиться с любыми сложностями и продолжить обучение без перерывов.
❗❗❗

⏲️Тайм-коды:

00:00 - Вступление
00:14 - Условие
00:38 - Вариант 1
01:16 - Вариант 2
02:04 - Завершение

#codewars #JavaScript #Программирование #РешениеЗадач #Кодинг #algorithm #code #programming #алгоритмы #Leetcode #code #coding #interview #tech #technology #development #developer #promise #junior #senior #middle #tutorials #tutorial #webdevelopment #react #typescript

🔗 Полезные ссылки:

🔗 Документация:

🔗 Еще видео:

👤 Мои соц сети:

🔔 Подпишитесь на канал: Если вы хотите быть в курсе всех новинок и получать полезные советы по подготовке к интервью, не забудьте подписаться на канал и нажать на колокольчик, чтобы не пропустить новые видео!

💬 Ваши вопросы и комментарии: Если у вас есть вопросы или идеи, оставляйте их в комментариях ниже. Мне приятно получать обратную связь от зрителей!
Рекомендации по теме
Комментарии
Автор

Спасибо за видео и нтересную задачку! 👍
Тоже решил двумя способами:

function chunk(arr, size) {
const result = [];
const length = Math.ceil(arr.length / size);
for (let i = 0; i < length; i++) {
const start = i * size;
result.push(arr.slice(start, start + size));
}
return result;
}

const chunk = (arr, size) => Array.from({
length: Math.ceil(arr.length / size)
}, (_, i) => arr.slice(i *= size, i + size));

SerzhNesteruk
Автор

Решения в видео довольно интересные, но имеют свои нюансы. Ни одно из них не является достаточно безопасным и эффективным. 🤔

1) В первом решении мутация массива, переданного в функцию в качестве аргумента, может служить причиной трудноуловимых багов. Такое считается не самой лучшей практикой (и в видео на это указывается).

2) Во втором решении рекурсия придаёт коду декларативности и понятности, но также добавляет риск переполнения стека вызовов. Что закономерно и произойдёт при разбивании массива на большое количество чанков.

3) Оба решения показывают разный перформанс, но для обоих характерна одинаковая временная сложность, а именно квадратичная. В первом случае она обеспечивается линейным методом splice в цикле while, а во втором — линейным concat (или spread) вместе с вторым линейным slice в рекурсии.

4) Сложность по памяти для первого решения константная, то есть мы не используем дополнительную память. Это замечательно, хотя всё же не является приемлемым оправданием для мутации исходного массива.

5) Во втором варианте (и в его подварианте) из-за создания временных массивов (вторым slice, concat, spread) сложность по памяти будет равна O(n^2 + m^2), где n — длина массива, а m — количество чанков. Это ещё не учитывая необходимую память на call stack. Правда, автор справедливо отметил, что этот вариант по памяти не является эффективным.

SerzhNesteruk
visit shbcf.ru