Полевой справочник
Преобразование массива на месте
O(n)Переписывать массив в его же буфере вместо выделения нового: более ранние ячейки перезаписываются по мере продвижения вперёд, а итоговая длина меньше или равна исходной.
Сигналы
изменить массив на местеO(1) дополнительной памятине выделять ещё один массив/строкуразвернуть/повернуть/разбить/переместить элементы в одном буферевернуть новую длину после удаления дубликатов
Шаблон
function inPlaceTransform(arr) {
let write = 0;
for (let read = 0; read < arr.length; read++) {
if (shouldKeep(arr[read])) {
arr[write] = arr[read];
write++;
}
}
return write; // new logical length
}Похоже, но не то
- Два указателя (в одну сторону): Здесь работа на месте это ЦЕЛЬ (O(1) памяти, один буфер); пара медленный/быстрый указатель это лишь один из МЕХАНИЗМОВ, которым эта цель достигается. Разворот блока фиксированного размера или поворот массива тоже на месте, но без пары указателей.
n до 1e5..1e6 -> O(n): один проход по буферу, второй массив не создаётся, поэтому память остаётся O(1).
Изучить этот паттерн