Алгоритмы - Собеседования, Олимпиады, ШАД
12K subscribers
66 photos
5 videos
11 files
209 links
Номер заявления регистрацию в РКН: № 5731053751

Чат: @algoses_chat

По всем вопросам: @vice22821
Download Telegram
Forwarded from Яндекс
🔴 Поздравляем медалистов IOI 2026! И рассказываем в карточках, кто получил медаль и кто помогает школьникам пройти путь от дипломов ВсОШ к победе на международной олимпиаде.

👉 Кстати, Яндекс Кружок открыл новый набор школьников на три олимпиадных направления: математика, программирование и ИИ. Преподаватели — действующие призёры и победители ВсОШ, медалисты международных олимпиад IOI, ICPC, IMC. Чтобы попасть в Кружок, нужно пройти отбор. Подробности — на сайте.

🔴 Кто представлял сборную России на IOI 2026?
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
8🔥6👍1
Задача с собеседования в OYO

Напишите функцию для поиска наибольшего общего префикса среди массива строк. Если общего префикса нет, верните пустую строку "".

Пример 1:
Input: strs = ["flower","flow","flight"]
Output: "fl"

Пример 2:
Input: strs = ["dog","racecar","car"]
Output: ""
Explanation: У входных строк отсутствует общий префикс.

Ограничения:
1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i] состоит только из строчных английских букв, если эта строка не пуста.

НАШ ЧАТ АЛГОРИТМИСТОВ

Решение
Основная идея: общий префикс не может быть длиннее самой короткой строки. Находим её через функцию min.
shortest - самая короткая строка.

Внешним циклом проходим по индексам и символам shortest, внутренним циклом - по строкам массива, проверяя, что у всех строк на этой же позиции стоит тот же символ:
Если встречаем несовпадение: выходим из цикла и возвращаем срез shortest[:i], состоящий из накопленного с прошлых итераций префикса;
Если все символы совпали: возвращаем shortest целиком, как общий префикс.


Сложность
O(n * m) - по времени (где n - кол-во строк в массиве, а m - длина самой короткой)
O(1) - по памяти (храним переменную shortest)


Код
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
if not strs:
return ""

shortest = min(strs, key=len)

for i, char in enumerate(shortest):
for word in strs:
if word[i] != char:
return shortest[:i]

return shortest


@algoses
3
Успейте подать заявку на E-CUP 2026 Students от Ozon Tech до 30 августа 🎓

В этом сезоне — только для студентов. Будет интересно тем, кто изучает ML / DS / big data / аналитику данных.

Сможете ускорить модель по поиску дубликатов на 20%? Получится создать классификатор для модерации товаров? Сумеете предсказать поведение покупателя?

Как минимум — попробуете и получите фидбэк от тех, кто делает это в Ozon Tech каждый день. Как максимум — разделите призовой фонд в 7 200 000 ₽ в торжественной атмосфере конференции E-CODE.

Нетривиальные задачи, нетворк с ведущими специалистами индустрии, кастомный мерч и шанс масштабно усилить портфолио — это про E-CUP 2026 Students.
Больше подробностей и регистрация ↩️
Задача с собеседования в Persistent Systems

Инвертирование бита числа x - это выбор какого-либо бита в двоичном представлении числа x и изменение его значения с 0 на 1 или с 1 на 0.
Например, для x = 7 двоичное представление - 111, и мы можем выбрать любой бит (включая ведущие нули, которые не показаны) и инвертировать его. Мы можем инвертировать первый бит справа, чтобы получить 110, инвертировать второй бит справа, чтобы получить 101, инвертировать пятый бит справа (ведущий ноль), чтобы получить 10111, и так далее.
Даны два целых числа start и goal. Верните минимальное количество инвертирований битов, чтобы преобразовать start в goal.

Пример 1:
Input: start = 10, goal = 7
Output: 3
Explanation: Двоичное представление 10 и 7 - это 1010 и 0111, соответственно. Мы можем преобразовать 10 в 7 за 3 шага:
- Инвертировать первый бит справа: 1010 -> 1011.
- Инвертировать третий бит справа: 1011 -> 1111.
- Инвертировать четвёртый бит справа: 1111 -> 0111.
Можно показать, что преобразовать 10 в 7 менее чем за 3 шага невозможно. Следовательно, возвращаем 3.

Пример 2:
Input: start = 3, goal = 4
Output: 3
Explanation: Бинарное представление 3 и 4 - это 011 и 100, соответственно. Мы можем преобразовать 3 в 4 за 3 шага:
- Инвертировать первый бит справа: 011 -> 010.
- Инвертировать второй бит справа: 010 -> 000.
- Инвертировать третий бит справа: 000 -> 100.
Можно показать, что преобразовать 3 в 4 менее чем за 3 шага невозможно. Следовательно, возвращаем 3.

Ограничения:
0 <= start, goal <= 10⁹

НАШ ЧАТ АЛГОРИТМИСТОВ

Решение
И вновь задачка на побитовые манипуляции.
Итак, каждый бит принимает одно значение: 1 или 0. Чтобы преобразовать число start в goal, необходимо инвертировать все различающиеся в одной и той же позиции биты, а совпадающие - оставить на месте. То есть минимальное кол-во инвертирований для преобразования исходного числа в целевое = кол-ву позиций (count), в которых биты двоичных представлений этих чисел различаются.

Чтобы определить различающиеся позиции, применяем оператор XOR (исключающее ИЛИ), сравнивающий два бита:
- если биты одинаковые -> 0
- если биты разные -> 1
start ^ goal даёт значение, в котором единицы стоят в тех позициях, где биты различаются.

Теперь посчитаем кол-во единиц в значении xor, используя побитовый И:
- только если оба бита равны 1 -> 1
- иначе -> 0

Пока xor больше 0 (есть хотя бы одна единица):
- xor & (xor - 1):
При (xor - 1) получаем новое число, в котором самая правая единица инвертируется в ноль, все нули справа от неё - в единицы, а биты слева - не изменяются.
Затем при операции побитового И(&) между этим новым значением и исходным числом:
Биты слева не меняются, так как одинаковы в обоих числах;
Самая правая единица обнуляется;
Все биты справа остаются нулями.
Таким образом, удаляется ровно одна правая единица.

- на каждой итерации увеличиваем count (кол-во единиц в xor) на 1.

Возвращаем count, хранящее кол-во единиц в xor, а значит, минимальное кол-во инвертирований битов.

Сложность
O(k) - по времени (где k - кол-во единиц в xor)
O(1) - по памяти (храним переменные count и xor)

Код
class Solution:
def minBitFlips(self, start: int, goal: int) -> int:
count = 0
xor = start ^ goal

while xor:
xor = xor & (xor - 1)
count += 1

return count

@algoses
🔥3
Зачем нужны продвинутые алгоритмы

Идет набор на наши курсы ПРО. Самое время обсудить, зачем нужен наш курс алгоритмы про.
➡️ Записаться

Олимпиады и магистратуры
Почти на любую школу/стажировку/магистратуру вы пишете контесты, уровень этих контестов меняется каждый год, уже в последнем контесте яндекса на стажировку вы можете увидеть продвинутые оптимизации ДП и MITM. Во всякие ШАДы и так понятно, что контесты требуют высокой подготовки и большой насмотренности по алгоритмам. А также всё чаще встречаются ивенты/олимпиады для студентов (например yandex cup/турниры от fonbet/чемпионат от мтс) и старше по олимпиадному программированию, за которые можно получать денежные призы/бви в магистратуры/ фасттреки в сильнейшие бигтехи или хфт конторы.

FAANG+
В зарубежные компании куда сложнее отбор, зачастую там отбор состоит из 3-4 собеседований, а пару алгоритмических тем не хватит чтобы пройти эти собеседования. Там значительно объемнее алгоритмический багаж, который требуется для решения задач, и даже умения решать хард задачи на литкоде не хватит на проход. Например наш выпускник Максим (отзыв на сайте) прошел все этапы собеседования в гугл и уже окончил intern swe стажировку с зарплатой 8000$ в месяц. На самом собеседовании он как-раз решал задачу на битовый бор, который мы разбирали на первом уроке.

Computer Science
У многих компаний бигтеха есть свои лаборатории, в которые они направляют задачки, возникшие в процессе разработки в проде, которые не имеют решений в настоящее время. Например в т-банке есть лаборатория cs, где работает один из наших учеников Игорь. Что оптимизирует: курьеры получают на день некоторое количество заказов, а компания должна придумать сразу оптимальное разбиение всех заказов по курьерам и их маршруты так, чтобы минимальное количество топлива было затрачено на их сумму минимальных путей (почти что TSP задача). Лаборанты по большому счету работают там над теорией алгоритмов, придумывают эффективную идею и тестируют её на синтетических данных, а уже потом предложенную идею отправляют в прод. Здесь полноценный ресерч, вы должны не просто уметь хорошо решать задачи, но и должны знать большое количество алгоритмов и идей.

HFT
Даже в фонды среднячки нужна серьезная алгоритмическая подготовка, недавно мы узнали, что наш ученик Артем (смотрите на сайте), как раз устроился через пару месяцев после курса по алгосам в Fast Forward. А ранее ему дали задачу на собеседовании в Spectral рейтинга 2000 на кфе, и эту секцию он легко прошел. В хфт есть несколько направлений SWE, QR и Trader. На каждое из этих направлений нужны очень сильные алгоритмы. Отчасти стэк технологий трейдера и задачи его покрывают qr и swe, поэтому рассмотрим потребность в алгоритмах от его лица. Всё сказанное про ML и Бэк верно и для него, но только требуется еще более глубокое понимание всего. Например здесь же уже нужно понимать как реализованы внутри модели, какие структуры они используют, как их оптимизировать, а также и сами нюансы внутренние у реализаций библиотек. Здесь также и требуется иметь навыки бэкендера, но тут уже нужно глубокое понимание языка (чаще всего плюсов) на уровне количества инструкций в той или иной среде для какой-либо операции, а также нужно отлично знать алгоритмы и уметь их применять (последнее вдвойне ценится). Тут уже зачастую недостаточно придумать асимптотически наилучшее решение, нужно искать кучу неасимптотических оптимизаций для частных случаев данных.

Подписаться: @algoses
Please open Telegram to view this post
VIEW IN TELEGRAM
6🔥2
Выходим на новый уровень с линейкой 1️⃣1️⃣1️⃣

Товарищи, если база уже есть, то следующий шаг — углубиться в специализацию, закрыть пробелы, освоить новые инструменты и стать сильнее как специалист.

Для этого мы запускаем ПРО — углублённые карьерные курсы для тех, кто хочет качать карьеру и заработок! Для записи и вопросов — пишите менеджеру

📎Курсы ПРО подойдут тем, кто:

— уже знает основы и хочет глубже разобраться в своей специализации
— хочет перейти с junior на middle и расти дальше
— готовится к собеседованиям на более сильные позиции
— хочет сменить роль и добрать недостающие навыки
— уже на старте имеет сильную базу и хочет целиться выше стажёрских и junior-позиций

➡️Действует гарантия: прошел курс, выполнил все рекомендации, но не получил оффер — вернем деньги
➡️Курс длится 6 недель: теория, практика, домашние задания и пет-проект. Всё это время рядом преподаватель и куратор.

Открываем сразу 5 направлений:

➡️Аналитика ПРО
Продвинутый SQL, A/B-тесты, эконометрика, Causal Inference и ML.


➡️ML ПРО
Вывод модели в прод, MLOps, рекомендательные системы, ранжирование, uplift и динамическое преобразование.


➡️Backend ПРО
Многопоточка, System Desgin, Микросервисы, базы данных, кеширование, мониторинг и распределённые системы.


➡️Алгоритмы ПРО
Продвинутые алгоритмы и задачи для сложных технических интервью в hft фонды, faang+, для олимпиад и контестов.


➡️ИИ-агенты ПРО
Будем разбираться не просто в LLM. Вы научитесь проектировать полноценные агентные системы и за курс соберём 5 собственных AI-агентов и пройдём весь путь от архитектуры и инструментов до работы с RAG, multi-agent системами, MCP, evals и деплоем.


В программу всех курсов войдет:

🔵закрытый банк вопросов с интервью топовых бигтехов
🔵разбор ближайшей стажировки в Т-банк и Яндекс
🔵mock-собеседования с обратной связью
🔵рефералка в бигтех после защиты пет-проекта
🔵карьерная стратегия: резюме, поиск вакансий, подготовка к HR секциям

💰Бонус для всех записавшихся до 23.08 — курс про поиск валютной удалёнки и работы за рубежом в подарок
Please open Telegram to view this post
VIEW IN TELEGRAM
2
Яндекс приглашает школьников на бесплатные Кружки по математике, программированию и ИИ

Кружки открыты для школьников 5–11 классов, а занятия ведут преподаватели с опытом участия в олимпиадах, работы в жюри и подготовки сборных. Программа рассчитана на учебный год (с сентября по май) и построена на сочетании лекций, семинаров, тематических контестов, пробных олимпиад и зачётов и дистанционных туров.

Всего три направления:

🔸Олимпиадное программирование (6–11 классы). Углублённое изучение алгоритмов и структур данных. 5 параллелей с разными уровнями сложности — для начинающих и продвинутых олимпиадников. Регистрация уже заканчивается.
🔸Олимпиадная математика (5–11 классы). Программа включает алгебру, геометрию, комбинаторику, теорию чисел. Есть базовый трек для уверенного освоения и профильный для подготовки к заключительным этапам ВсОШ и перечневым олимпиадам.
🔸Искусственный интеллект (8–11 классы). В курсе: Python, анализ данных, нейросети, большие языковые модели и подготовка к профилю ВсОШ по искусственному интеллекту.

Обучение бесплатное. Успейте подать заявки: до 30 августа — на олимпиадное программирование, до 6 сентября — на Кружок по ИИ и олимпиадную математику.
❤‍🔥3