Алгоритмы с нуля
Массивы и строки: тест с выбором ответа
Шесть вопросов через весь юнит. Каждый — это выбор, который ты делаешь у доски или на код-ревью: не определение для зубрёжки, а правильный приём и то условие, на которое он молча опирается.
Убедись, что связываешь модель стоимости непрерывного массива с приёмами поверх неё — two pointers, sliding window, prefix sum, запись in-place и строки-как-массивы — и узнаёшь предусловие, которое каждый из них тихо предполагает.
Профайлер показывает горячий цикл, который на каждый запрос вставляет по индексу 0 в массив из 1M элементов. Почему это узкое место и какой правильный фикс?
Ты применяешь two pointers с концов (two-sum) для поиска пары с заданной суммой, но он пропускает пары, которые ты видишь глазами. Самая вероятная причина?
Для «наименьший подмассив с суммой ≥ target» на положительных целых вариативное окно (sliding window) работает за O(n), хотя внутри есть вложенный while. Почему это не O(n²)?
Сервис отвечает на тысячи запросов суммы на диапазоне по логу фиксированной длины. Сейчас каждый запрос проходит диапазон. Когда предвычисление prefix sum — правильный выбор и чего оно стоит?
Ревьюер отмечает, что твой in-place «удалить все нули» через write-указатель мутирует массив вызывающего, ломая последующее чтение оригинала. Как правильно сформулировать компромисс?
Функция собирает большой CSV через result += line внутри цикла по n строкам и неожиданно медленна на масштабе. Что происходит и какой фикс?
Сквозная линия юнита — одна модель стоимости и приёмы, что её используют. Непрерывность даёт O(1) индексацию, но O(n) сдвиги, поэтому вставка в начало/середину — ловушка, а append дёшев. Two pointers превращают вложенный перебор пар в один проход — но two-sum с концов требует отсортированного входа. Sliding window — O(n), потому что указатели идут только вперёд. Prefix sum меняет O(n) памяти на O(1) запросы по диапазону на статичных данных. Запись in-place покупает O(1) памяти ценой оригинала. А строки — это массивы с одним укусом: неизменяемость делает конкатенацию в цикле O(n²) — складывай в массив и join.