Функция, исключающая чётные элементы из массива

Используйте два индекса: чтение проходит весь массив, запись уплотняет нечётные элементы в его начале. Затем удалите оставшийся хвост.

Короткий ответ

Что ответить на собеседовании

Используйте два индекса: чтение проходит весь массив, запись уплотняет нечётные элементы в его начале. Затем удалите оставшийся хвост.

Подробный разбор

Ответ с пояснениями

Условие

Создайте функцию, которая удаляет из переданного массива все чётные числа, при этом не используя дополнительный массив и не прибегая к функциям высшего порядка.

Ответ

Используйте два индекса: чтение проходит весь массив, запись уплотняет нечётные элементы в его начале. Затем удалите оставшийся хвост.

func removeEven(_ values: inout [Int]) {
    var write = 0
    for read in values.indices {
        if values[read] % 2 != 0 {
            values[write] = values[read]
            write += 1
        }
    }
    values.removeLast(values.count - write)
}

Порядок оставшихся чисел сохраняется; отрицательные нечётные числа тоже проходят проверку. Алгоритм линейный и не создаёт дополнительный массив или closure высшего порядка. У Swift Array действует copy-on-write: при разделяемом буфере сама мутация может вызвать копирование хранилища, что не отменяет отсутствия второго массива в алгоритме.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее