Сложность: medium
Разработайте свою реализацию круговой двусторонней очереди (deque). Реализуйте класс MyCircularDeque: MyCircularDeque(int k) Инициализирует deque с максимальным размером k. boolean insertFront() Добавляет элемент в переднюю часть Deque. Возвращает true, если операция прошла успешно, или false в противном случае. boolean insertLast() Добавляет элемент в заднюю часть Deque. Возвращает true, если операция выполнена успешно, или false в противном случае. boolean deleteFront() Удаляет элемент из передней части Deque. Возвращает true, если операция прошла успешно, или false в противном случае. boolean deleteLast() Удаляет элемент из задней части Deque. Возвращает true, если операция прошла успешно, или false в противном случае. int getFront() Возвращает передний элемент из Deque. Возвращает -1, если Deque пуст. int getRear() Возвращает последний элемент из Deque. Возвращает -1, если Deque пуст. boolean isEmpty() Возвращает true, если Deque пуст, или false в противном случае. boolean isFull() Возвращает true, если Deque полон, или false в противном случае.
Пример:
Input
["MyCircularDeque", "insertLast", "insertLast", "insertFront", "insertFront", "getRear", "isFull", "deleteLast", "insertFront", "getFront"]
[[3], [1], [2], [3], [4], [], [], [], [4], []]
Output
[null, true, true, true, false, 2, true, true, true, 4]
👨💻 Алгоритм:
1⃣Инициализация и проверка состояний
Реализуйте конструктор для инициализации кольцевой двусторонней очереди заданного размера и методы для проверки пустоты и полноты очереди.
2⃣Операции вставки
Реализуйте методы вставки элементов в переднюю и заднюю части очереди с учетом кольцевой структуры.
3⃣Операции удаления
Реализуйте методы удаления элементов из передней и задней частей очереди с учетом кольцевой структуры и методы для получения переднего и заднего элементов очереди.
😎 Решение:
var MyCircularDeque = function(k) {
this.k = k;
this.deque = new Array(k);
this.front = 0;
this.rear = 0;
this.size = 0;
};
MyCircularDeque.prototype.insertFront = function(value) {
if (this.isFull()) return false;
this.front = (this.front - 1 + this.k) % this.k;
this.deque[this.front] = value;
this.size++;
return true;
};
MyCircularDeque.prototype.insertLast = function(value) {
if (this.isFull()) return false;
this.deque[this.rear] = value;
this.rear = (this.rear + 1) % this.k;
this.size++;
return true;
};
MyCircularDeque.prototype.deleteFront = function() {
if (this.isEmpty()) return false;
this.front = (this.front + 1) % this.k;
this.size--;
return true;
};
MyCircularDeque.prototype.deleteLast = function() {
if (this.isEmpty()) return false;
this.rear = (this.rear - 1 + this.k) % this.k;
this.size--;
return true;
};
MyCircularDeque.prototype.getFront = function() {
if (this.isEmpty()) return -1;
return this.deque[this.front];
};
MyCircularDeque.prototype.getRear = function() {
if (this.isEmpty()) return -1;
return this.deque[(this.rear - 1 + this.k) % this.k];
};
MyCircularDeque.prototype.isEmpty = function() {
return this.size === 0;
};
MyCircularDeque.prototype.isFull = function() {
return this.size === this.k;
};Ставь 👍 и забирай 📚 Базу знаний