Это типа сиплюсплюсного std::remove_if
Два индекса инициализируются началом массива.
Если элемент по первому индексу нужно копировать (предикат истинный), то он копируется в позицию второго индекса. Соответственно, инкремент первого индекса делается всегда, а второго - только при копировании.
В результате, в хвосте массива останется мусор в количестве удалённых элементов (второй индекс будет указывать на первый такой элемент), и остаётся только удалить этот ненужный хвост.
То есть, за линейное время удаляем все ненужные элементы и заполняем пропуски. При желании, элементарная оптимизация позволяет не копировать элементы в ту же позицию, в которой они уже есть