Вопрос проверяет понимание реализации очереди в JavaScript с эффективным временем выполнения операций и недостатков метода shift() при работе с большими массивами.
В JavaScript метод Array.prototype.shift() удаляет первый элемент массива и возвращает его. Однако после удаления все оставшиеся элементы сдвигаются на одну позицию влево, что требует O(n) операций. При большом количестве элементов и частых вызовах это приводит к значительному снижению производительности.
Для достижения O(1) при добавлении и удалении элементов можно использовать следующие подходы:
class Queue {
constructor() {
this.items = {};
this.head = 0;
this.tail = 0;
}
enqueue(element) {
this.items[this.tail] = element;
this.tail++;
}
dequeue() {
if (this.isEmpty()) return undefined;
const item = this.items[this.head];
delete this.items[this.head];
this.head++;
return item;
}
isEmpty() {
return this.head === this.tail;
}
}В этой реализации enqueue и dequeue выполняются за O(1), так как мы просто добавляем или удаляем свойство объекта по ключу.
При высокой нагрузке и частых операциях с очередью не стоит использовать Array.prototype.shift(). Лучше применить специализированную структуру данных, например, реализацию на объекте или связном списке, чтобы обеспечить предсказуемую производительность O(1).
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию