Алгоритмы для аналитика — задачи с собесов 2026

Алгоритмическая секция — обязательная часть собеседования в Яндекс, Ozon, Авито на Middle+ позиции аналитика. Здесь — карта 100+ задач по уровню сложности (Junior/Middle/Senior), с условиями в формате Coderun, Python-решениями, разбором сложности и подводных камней.
Содержание (8 разделов)
  1. Junior — базовые паттерны (5-7 задач)
  2. Middle — собесные классики (10-15 задач)
  3. Senior — design + сложные паттерны
  4. Big-O нотация — must know на собесе
  5. Топ-10 паттернов которые покрывают 80% задач
  6. Пример: Top K Frequent Elements
  7. Шпаргалка по сложности структур данных Python
  8. Как готовиться эффективно

Junior — базовые паттерны (5-7 задач)

Знание этих 5 задач = минимум для прохождения Junior-собеса в Яндекс/Ozon. Они тренируют распознавание паттернов: hash map, stack, two pointers, binary search.

Middle — собесные классики (10-15 задач)

На Middle ждут, что ты различаешь O(n log n) heap-подход и O(n) bucket для Top-K, знаешь когда LRU через OrderedDict, а когда вручную через двусвязный список + hash map.

Senior — design + сложные паттерны

На Senior спрашивают design-задачи: реализуй LRU Cache, MedianFinder. Важно объяснить trade-off (память vs скорость, simplicity vs performance).

Big-O нотация — must know на собесе

На любой алго-задаче спросят сложность time и space. Знай разницу между worst case, average case, amortized analysis.

НотацияНазваниеПримеры
O(1)Константнаяhash map insert/lookup
O(log n)Логарифмическаяbinary search, heap insert
O(n)Линейнаяодин проход по массиву
O(n log n)Линейно-логарифм.merge sort, quick sort avg
O(n²)Квадратичнаядва вложенных цикла, bubble sort
O(2^n)Экспоненциальнаяrecursion без memoization

Топ-10 паттернов которые покрывают 80% задач

Если ты освоил эти 10 паттернов — справишься с 80% собесных задач. На задачу смотришь и распознаёшь «это типа sliding window» или «это типа Top-K через heap».

Пример: Top K Frequent Elements

Классическая Middle-задача. Дан массив чисел, найди k самых частых элементов. Два подхода — heap O(n log k) и bucket O(n). На собесе ожидают что ты предложишь оба и обоснуешь trade-off.

from collections import Counter
import heapq

def topKFrequent(nums, k):
    # Подход 1: heap O(n log k)
    count = Counter(nums)
    return heapq.nlargest(k, count.keys(), key=count.get)

def topKFrequent_bucket(nums, k):
    # Подход 2: bucket sort O(n)
    count = Counter(nums)
    buckets = [[] for _ in range(len(nums) + 1)]
    for num, freq in count.items():
        buckets[freq].append(num)
    result = []
    for i in range(len(buckets) - 1, -1, -1):
        result.extend(buckets[i])
        if len(result) >= k:
            return result[:k]
    return result

Шпаргалка по сложности структур данных Python

Помни эти константы — на собесе спросят: «какая сложность dict.get?». Заодно поможет выбирать правильную структуру.

СтруктураLookupInsertDelete
list (по индексу)O(1)O(n) (вставка не в конец)O(n)
list (поиск)O(n)O(1) appendO(n)
set / dictO(1) avgO(1) avgO(1) avg
dequeO(1) с концовO(1) appendleft/appendO(1) popleft/pop
heap (heapq)O(1) minO(log n)O(log n)

Как готовиться эффективно

Решай по 1-2 задачи в день на свежую голову. После решения смотри 2-3 чужих подхода — учись паттернам, а не зубри код. На собесе важнее озвучить approach и распознать паттерн, чем сразу написать идеально.

Частые вопросы

Спрашивают ли алгоритмы на собесе аналитика?

Да, на Middle+ позиции в Яндекс, Ozon, Авито, Тинькофф. На Junior могут быть 1-2 простые задачи (Two Sum, Binary Search). На Senior — design-задачи (LRU Cache, MedianFinder). На Lead/Staff алгоритмы могут заменить на system design.

Где брать задачи похожие на Yandex Coderun?

У нас в тренажёре есть 100+ задач в Coderun-формате (Условие → Формат входа/выхода → Примеры → Ограничения). Можно сразу решать в браузере через Pyodide. Также есть официальный coderun.yandex.ru с возможностью прогнать решение бесплатно.

Какие алгоритмы спрашивают чаще всего?

Топ-7: 1) hash map (Two Sum) — 80% собесов. 2) Sliding window — 70%. 3) Binary Search — 60%. 4) Two pointers — 60%. 5) BFS/DFS на графах — 50% Middle+. 6) DP — 40% Middle+. 7) Top-K / Heap — 40% Middle+.

Сколько времени готовиться к алго-секции?

С нуля: 2-3 месяца, по 1-2 задаче в день (60-100 задач). С опытом: 1 месяц повторения + новые паттерны. Перед собесом — 3-5 mock-интервью с алго-задачами.

Нужно ли знать Big-O нотацию?

Да, обязательно. Спросят сложность каждого решения — O(n), O(n log n), O(n²). Также amortized analysis (hash map insert O(1) amortized) и space complexity. Знай разницу между worst и average case.

Какие книги читать по алгоритмам?

1) «Грокаем алгоритмы» Адитья Бхаргава (визуально, для новичков). 2) «Алгоритмы. Построение и анализ» Кормен (классика). 3) Cracking the Coding Interview (паттерны интервью). 4) Open-source разборы задач на GitHub — лучший практический ресурс.

Сколько задач решить до собеса?

Junior: 50-80 простых задач (easy + первые medium). Middle: 150-200 (mix easy/medium/hard, фокус на medium). Senior: 300+ задач включая design (LRU, MedianFinder, Trie). Главное: разные паттерны, не однотипные задачи.

Что важнее — скорость или подход?

Подход. На собесе оценивают как ты думаешь: распознал ли паттерн, можешь ли обосновать сложность, видишь ли trade-off. Не успел дописать — не страшно, если объяснил подход. Молчал 10 минут — провал даже если написал идеально.

Можно ли использовать встроенный sort на собесе?

Да, в Python — sorted() / list.sort() (Timsort O(n log n)) приемлемы. Спросят: «а как ты сам напишешь sort?» — должен знать merge sort или quick sort. Не пытайся писать heap sort вручную если можно heapq.

Что делать если задача не идёт?

Шаг 1: проговори условие вслух, нарисуй пример на бумаге. Шаг 2: предложи brute force подход, оцени сложность. Шаг 3: подумай как ускорить (hash map? sorted? two pointers?). Шаг 4: если не идёт за 30 мин — попроси подсказку. Это ОК для обучения, но не на реальном собесе.

Начать практику бесплатно →