Проверяет понимание различий в производительности операций добавления элементов в начало и конец массива и причин этих различий.
Массив в большинстве языков программирования хранится как непрерывный блок памяти, где элементы расположены последовательно друг за другом. Это обеспечивает быстрый доступ по индексу за O(1), но накладывает ограничения на операции вставки и удаления.
Когда вы добавляете элемент в конец массива, новый элемент просто записывается в следующую свободную ячейку памяти. Если массив имеет зарезервированную ёмкость, операция занимает O(1). Если места нет, массив расширяется (обычно удваивается), и элементы копируются — это амортизированно O(1).
При вставке в начало все существующие элементы должны сдвинуться на одну позицию вправо, чтобы освободить место для нового элемента. Это требует копирования всех n элементов, то есть O(n) времени. Чем больше массив, тем дороже операция.
// JavaScript пример
const arr = [1, 2, 3, 4, 5];
// O(1) амортизированно
arr.push(6); // [1,2,3,4,5,6]
// O(n) — все элементы сдвигаются
arr.unshift(0); // [0,1,2,3,4,5,6]
Итог: если требуется частая вставка в начало, массив — плохой выбор. Используйте структуры данных, оптимизированные для таких операций, например связный список или deque.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию