es
Feedback
Алгоритмы - Собеседования, Олимпиады, ШАД

Алгоритмы - Собеседования, Олимпиады, ШАД

Ir al canal en Telegram

Номер заявления регистрацию в РКН: № 5731053751 Чат: @algoses_chat По всем вопросам: @vice22821

Mostrar más

📈 Análisis del canal de Telegram Алгоритмы - Собеседования, Олимпиады, ШАД

El canal Алгоритмы - Собеседования, Олимпиады, ШАД (@algoses) en el segmento lingüístico de Ruso es un actor destacado. Actualmente la comunidad reúne a 11 938 suscriptores, ocupando la posición 16 822 en la categoría Educación y el puesto 54 758 en la región Rusia.

📊 Métricas de audiencia y dinámica

Desde su creación el невідомо, el proyecto ha mostrado un crecimiento acelerado, reuniendo a 11 938 suscriptores.

Según los últimos datos del 04 julio, 2026, el canal mantiene una actividad estable. En los últimos 30 días la variación de miembros fue de 55, y en las últimas 24 horas de 11, conservando un alto alcance.

  • Estado de verificación: No verificado
  • Tasa de interacción (ER): El promedio de interacción de la audiencia es 23.84%. Durante las primeras 24 horas tras publicar, el contenido suele obtener 9.11% de reacciones respecto al total de suscriptores.
  • Alcance de las publicaciones: Cada publicación recibe en promedio 2 846 visualizaciones. En el primer día suele acumular 1 087 visualizaciones.
  • Reacciones e interacción: La audiencia responde de forma activa: el promedio de reacciones por publicación es 3.
  • Intereses temáticos: El contenido se centra en temas clave como строка, собеседование, foo, delete, o(n.

📝 Descripción y política de contenido

El autor describe el recurso como un espacio para expresar opiniones subjetivas:
Номер заявления регистрацию в РКН: № 5731053751 Чат: @algoses_chat По всем вопросам: @vice22821

Gracias a la alta frecuencia de actualizaciones (últimos datos recibidos el 05 julio, 2026), el canal mantiene la vigencia y un amplio alcance. La analítica demuestra que la audiencia interactúa activamente con el contenido, lo que lo convierte en un punto de referencia dentro de la categoría Educación.

11 938
Suscriptores
+1124 horas
+257 días
+5530 días
Archivo de publicaciones
Задача с собеседования в Zopsmart Дана голова односвязного списка. Разверните список и верните его. Follow-up: связный список можно развернуть как итеративно, так и рекурсивно. Могли бы вы реализовать оба способа? Пример 1: Input: head = [1,2,3,4,5] Output: [5,4,3,2,1] Пример 2: Input: head = [1,2] Output: [2,1] Пример 3: Input: head = [] Output: [] Ограничения: Количество узлов в списке находится в диапазоне [0, 5000]. -5000 <= Node.val <= 5000 НАШ ЧАТ АЛГОРИТМИСТОВ Решение В односвязном списке каждый узел хранит данные и ссылку на следующий элемент (или None, если узел последний). Чтобы развернуть список, нужно изменить указатели всех узлов на противоположные. Итеративно: reversed_head - голова развёрнутого списка (сначала None, так как развёрнутый список пуст). head - узел, с которым работаем (текущий обрабатываемый узел исходного списка). head.next - указатель текущего узла, его направление будем менять. Идём до конца исходного списка, на каждой итерации обрабатывая head: - сохраняем узел, следующий за head, в переменную next_node, чтобы не потерять остаток списка после разрыва связи между узлами; - операция разворота: указатель текущего узла теперь указывает на голову развёрнутой части; - обновляем голову развёрнутой части: теперь она начинается с текущего узла; - переходим к сохраненному остатку исходного списка. В конце возвращаем голову развёрнутого списка. Сложность: O(n) - по времени (проходим по списку один раз) O(1) - по памяти (храним три указателя, разворачиваем ссылки на месте) Код: class Solution:     def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:         reversed_head = None         while head:             next_node = head.next             head.next = reversed_head             reversed_head = head             head = next_node         return reversed_head Рекурсивно: Сначала уходим в конец списка, достигая базового случая, а потом идём в обратном порядке, переворачивая указатели. Базовый случай: если исходный список пуст или следующий узел отсутствует. Последний узел становится головой развёрнутого списка, рекурсия останавливается. Рекурсивный случай: вызываем функцию для остатка исходного списка и получаем reversed_head - последний узел исходного списка, ставший головой (ссылка на него не меняется во время работы алгоритма). После достижения базового случая поднимаемся по стеку вызовов: - меняем указатель у узла, следующего за head, на head. Теперь они ссылаются друг на друга; - разрываем старую связь между узлами: head указывает на None и становится последним узлом в развёрнутой части; - возвращаем голову развёрнутого списка. Сложность: O(n) - по времени (кол-во вызовов равно длине списка) O(n) - по памяти (рекурсия линейная) Код: class Solution: def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]: if not head or not head.next: return head reversed_head = self.reverseList(head.next) head.next.next = head head.next = None return reversed_head @algoses

Хочешь учиться в магистратуре, но не готов бросать работу? Магистратура в Центральном университете — твой вариант. • Занятия
Хочешь учиться в магистратуре, но не готов бросать работу? Магистратура в Центральном университете — твой вариант. • Занятия по вечерам и выходным. • 4 офлайн-программы, 2 онлайн-программы. • Грант до 75% на всё обучение. В магистратуре ты сможешь прокачать навыки по: • продуктовому менеджменту; • машинному обучению; • продуктовой аналитике; • бэкенд-разработке. Будешь учиться у практиков и решать задачи, которые есть в бизнесе. По результатам обучения ты получишь диплом гособразца. 👉 Успей подать заявку до 7 июня и начни свой путь в ИТ-магистратуре!

Задача с собеседования в Zopsmart Даны строки s и t длиной m и n, соответственно. Верните минимальную подстроку (подстроку окна) строки s такую, что каждый символ из строки t (включая повторяющиеся) содержится в этом окне. Если такой подстроки не существует, верните пустую строку "". Тестовые данные составлены таким образом, чтобы ответ был уникальным. Follow up: можете ли вы найти алгоритм, работающий за O(m + n) по времени? Пример 1: Input: s = "ADOBECODEBANC", t = "ABC" Output: "BANC" Объяснение: Подстрока минимального окна "BANC" включает символы 'A', 'B' и 'C' из строки t. Пример 2: Input: s = "a", t = "a" Output: "a" Объяснение: Вся строка s является минимальным окном. Пример 3: Input: s = "a", t = "aa" Output: "" Объяснение: Обе 'a' из строки t должны быть включены в окно. Поскольку самое большое окно s имеет только одну 'a', возвращаем пустую строку. Ограничения: m == s.length n == t.length 1 <= m, n <= 10⁵ s и t состоят из английских букв верхнего и нижнего регистра. НАШ ЧАТ АЛГОРИТМИСТОВ Решение Используем алгоритм "скользящего окна" с двумя указателями и хэш-таблицу. Расширяем окно правым указателем, пока не набираем все необходимые символы. Когда окно становится валидным, пробуем сжать его левым указателем, избавляясь от лишних символов, пока окно не перестанет удовлетворять условиям. Создаём два словаря: freqT - хранит частоту символов строки t, не изменяется; freqWindow - хранит частоту символов текущего окна, изменяется при движении указателей. Заполняем словарь freqT: - С помощью метода get(ch, 0) возвращаем текущую частоту символа, либо 0, если символ ещё не встречался. Увеличиваем счётчик символа на 1. Переменные: need - кол-во уникальных символов в t, которые нужно набрать; have - кол-во уникальных символов, которые уже есть в текущем окне. res - индексы минимального найденного окна; resLen - длина минимального окна (float("inf"), чтобы записать первое валидное окно в кач-ве минимального). Расширяем окно, проходя по строке s указателем r: - Добавляем каждый новый символ в словарь freqWindow и увеличиваем его частоту на 1; - Если текущий символ находится в freqT и после добавления его частота в freqWindow равна требуемой в freqT: увеличиваем have. Сжимаем окно, пока текущее окно содержит все необходимые символы: - Сравниваем длину окна с длиной найденного ранее (resLen). Если текущее окно короче: сохраняем его индексы в res и обновляем resLen; - Так как будем сдвигать левый указатель: текущий символ под его индексом покинет окно - уменьшаем счётчик этого символа в freqWindow на 1; - Проверяем, осталось ли окно валидным: если s[l] есть в freqT и кол-во символа в freqWindow меньше, чем необходимо (freqT), значит, мы потеряли один из требуемых уникальных символов - уменьшаем have на 1; - Сдвигаем левый указатель вправо. Если have становится меньше need, цикл завершается, мы возвращаемся к расширению окна правым указателем. Возвращаем срез по сохранённым индексам минимального найденного окна. Сложность O(m + n) - по времени (l и r двигаются только вправо и ограничены длиной s - O(m), заполнение freqT по строке t - O(n)) O(1) - по памяти (фиксированное кол-во букв алфавита) Код class Solution: def minWindow(self, s: str, t: str) -> str: if len(s) < len(t): return "" freqT, freqWindow = {}, {} for ch in t: freqT[ch] = 1 + freqT.get(ch, 0) need, have = len(freqT), 0 res, resLen = [-1, -1], float("inf") l = 0 for r in range(len(s)): ch = s[r] freqWindow[ch] = 1 + freqWindow.get(ch, 0) if ch in freqT and freqWindow[ch] == freqT[ch]: have += 1 while have == need: if (r - l + 1) < resLen: res = [l, r] resLen = (r - l + 1) freqWindow[s[l]] -= 1 if s[l] in freqT and freqWindow[s[l]] < freqT[s[l]]: have -= 1 l += 1 l, r = res return s[l:r+1] if resLen != float("inf") else "" @algoses

🔊Начался отбор в ШАД Товарищи, заполняем анкеты если ещё не сделали и приступаем к онлайн-тестированию. Время до 3 мая. Если
🔊Начался отбор в ШАД Товарищи, заполняем анкеты если ещё не сделали и приступаем к онлайн-тестированию. Время до 3 мая. Если сомневаешься, стоит ли пробовать поступать в этом году, то пробуй сейчас. Те, кто откладывают поступление на следующий год, откладывают и дальше. Сейчас лучший момент, чтобы задуматься о своем будущем. Специально в честь отбора открываем дополнительные места на интенсиве к ШАД с разбором первого этапа. Все участники получают: ➡️Разбор первого этапа с советами преподавателей, которые готовят в ШАД уже 5 лет ➡️Советы по заполнению анкеты и мотивации ➡️Подготовку к собеседованиям (следующий этап) ➡️Помощь с апелляцией Сегодня и завтра на интенсивы скидка 35% 9 1505 950 ₽ 19 30010 900 ₽ - стоимость за пакет из 2-х курсов 27 45014 850 - стоимость за пакет из 3-х курсов + дискретка в подарок 36 600 17 800 - стоимость за пакет из 4-х курсов + дискретка в подарок Количество мест ограничено! 📌 Для вопросов и записи на интенсивы напишите менеджеру

🔊Начался отбор в ШАД Товарищи, заполняем анкеты если ещё не сделали и приступаем к онлайн-тестированию. Время до 3 мая. Если
🔊Начался отбор в ШАД Товарищи, заполняем анкеты если ещё не сделали и приступаем к онлайн-тестированию. Время до 3 мая. Если сомневаешься, стоит ли пробовать поступать в этом году, то пробуй сейчас. Те, кто откладывают поступление на следующий год, откладывают и дальше. Сейчас лучший момент, чтобы задуматься о своем будущем. Специально в честь отбора открываем дополнительные места на интенсиве к ШАД с разбором первого этапа. Все участники получают: ➡️Разбор первого этапа с советами преподавателей, которые готовят в ШАД уже 5 лет ➡️Советы по заполнению анкеты и мотивации ➡️Подготовку к собеседованиям (следующий этап) ➡️Помощь с апелляцией Сегодня и завтра на интенсивы скидка 35% 9 1505 950 ₽ 19 30010 900 ₽ - стоимость за пакет из 2-х курсов 27 45014 850 - стоимость за пакет из 3-х курсов + дискретка в подарок 17 800 17 800 - стоимость за пакет из 4-х курсов + дискретка в подарок Количество мест ограничено! 📌 Для вопросов и записи на интенсивы напишите менеджеру

Привет, это ШАД. Это последний шанс попасть к нам в этом году. Мы знаем, как усердно вы готовитесь, поэтому хотим напомнить,
Привет, это ШАД. Это последний шанс попасть к нам в этом году. Мы знаем, как усердно вы готовитесь, поэтому хотим напомнить, что сильное обучение дает рост в знаниях и карьере. Для этого мы и здесь. 1. У нас бесплатная двухлетняя программа: серьёзная теория, реальные индустриальные задачи, преподаватели из Яндекса и ведущих компаний. 2. Направления: ML-разработка, Data Science, Big Data, прикладной анализ данных. 3. Поступление — через отбор. Есть классический трек (3 этапа) и альтернативный — для тех, кто уже работает в индустрии. 4. Обучаться можно офлайн / гибрид / онлайн. Подавайте заявку до 3 мая по ссылке

❗️ Через 7 часов закончится главное событие сезона - стажировка Т-банк На наших соответсвующих курсах уже выложен разбор математики и программирования, а на интенсиве по алгоритмам выложен разбор программирования. На все последние 7 часов 35% скидки в честь конца отбора. Все подробности у администратора. ➡️ Обязательно подаемся И не сомневаемся, это одна из лучших опций для получения первого опыта в индустрии: можно совмещать с учебой, загрузка от 20 часов в неделю, после нее легко залететь в штат и да, вам даже будут платить за нее! Для участия нужно просто заполнить анкету и решить отбор до 28 апреля. Задания на этот раз несложные (чекаем вот тут), но больше задач, где можно запросто ошибиться, специально сделали такие задачи, чтобы chatgpt путался с условиями и выдавал неправильные ответы и тех, кто спишет эти ответы, просто забанят в системе Т-банка. При этом из-за учебы подается меньше народу, все жесткие ботари заняты учебой, а значит у простых работяг куда больше шансов получить оффер! У топов собесы начнутся в мае, а у работяг в конце июня, когда сессия уже закончилась и есть силы и время, чтобы к ним подготовиться, еще не закончились. ➡️ Пишем качественную анкету Проходной на собес везде разный и зависит от популярности специальности и кол-во выделенных мест, региона. Где-то проход 350, а где-то 600 за контест. Далее отбор идет по анкете. Командам и HR очень важна ваша мотивация и погруженность в специальность. Будет обидно набрать полный балл за контест, но не заполнить анкету (подробный совет тоже даем участникам наших курсов). Общие советы такие: пишем про курсы, которые проходили и не проходили, фокусируем внимание на курсах от Т-банка. Только помните, что на собесе нужно будет не запутаться в этих выдумках. Обязательно пишем про олимпиадный опыт, даже школьный, от олимпиадников все просто сходят с ума. Пишем образование. Про свои стартапы и телеграмм каналы советую писать осторожно: это может отпугнуть. Подумают, что после года работы в штате вы уйдете строить свой мега успешный бизнес, а работодатель хочет, чтобы вы росли и развивались внутри компании и стали приносить пользу именной ей. Сразу создаем второй телеграмм канал для работы и учебы с настоящим именем и фамилией, без тупых статусов и аниме на аватаре. Это серьезно очень раздражает рекрутеров. Также с этого аккаунта не пишем никому и некуда никакую неоднозначную ерунду, которая может стать народным достоянием и вас скомпрометировать. Работодателю важно, чтобы вы разделяли корпоративные ценности. Касаемо составления анкеты и резюме более подробно рассказывал в ролике, обязательно посмотрите. ➡️ Собеседование Раньше большинство собесов было похоже на смотрины: команда рассказывала про себя, а вы про себя. Спрашивали мотивацию, бизнес кейс и может немного теории, задачи давали только на какого-нибудь риск аналитика. Сейчас все по-другому: контест не катает только ленивый, поэтому собесе почти всегда дают задачи. На аналитику и мл могут спросить матешу, скл, питон, а на разработчика и мл простенькие алгоритмы. Некоторые из этих заданий можно чекнуть тут, и тут, и тут, и тут, а если вы хотите разбор всех тасков с собесов - бегом на наши курсы. ➡️ Подробности Более подробно обо всем этом можно посмотреть в видео. Главное помните, что шанс выиграть в этой игре > 90% (по крайней мере, в прошлом году именно таким был процент взятых на стажировку среди наших учеников), если знать правила игры. Серьезно, прошлым летом выпускница нашего курса по аналитике прошла отбор и стала стажером-аналитиком едва закончив 11-ый класс. @postypashki_old

Завтра закончится отбора на стажировку в Т-банк Если хотите летом выйти на стажировку с высокой зарплатой и опытом работы в b
Завтра закончится отбора на стажировку в Т-банк Если хотите летом выйти на стажировку с высокой зарплатой и опытом работы в bigteche, то подаваться нужно уже сейчас. На наших соответсвующих курсах уже выложен разбор математики и программирования, а на интенсиве по алгоритмам выложен разбор программирования. 📌 Специально к закрытию отбора Скидка 35% на эти курсы с разборами до 28 апреля включительно. Также на курсах будет доступно:
➡️ разборы контеста Яндекса, Летних школ Яндекса ➡️Сочные пет проекты в портфолио ➡️Огромный банк технических вопросов ➡️Записи реальных собесов и интервью ➡️ Помощь с резюме и легендой
📌 Для записи на курс напишите менеджеру

Открылся отбор на стажировку в Т-Банк Задачи уже выложены в нашем чате (тут). Специально для участников карьерных курсов мы в
Открылся отбор на стажировку в Т-Банк Задачи уже выложены в нашем чате (тут). Специально для участников карьерных курсов мы выложим разбор соответствующих экзаменов. Также разберем экзамен по программированию на интенсиве по алгоритмам, на который также до 23 апреля действует специальная цена: 9150 5950 ₽. В разборе мы покажем подход к решению задач и как оформить ответ, чтобы получить высокий балл. Также на курсах будет доступно:
➡️ разборы контеста Яндекса, Летних школ Яндекса ➡️Огромный банк технических вопросов ➡️Записи реальных собесов и интервью
До 23 апреля курсы со скидкой 35%. 📌 Вопросы и запись — менеджеру

Задача с собеседования в Zopsmart Дана входная строка s. Переверните порядок слов в ней. Слово определяется как последовательность символов, не являющихся пробелами. Слова в s будут разделены хотя бы одним пробелом. Верните строку, содержащую слова в обратном порядке, объединённые одним пробелом. Обратите внимание, что строка s может содержать начальные или конечные пробелы, или несколько пробелов между двумя словами. В возвращаемой строке должен быть только один пробел между словами. Не включайте каких-либо лишних пробелов. Follow-up: если строковый тип данных - изменяемый в вашем языке, можете ли вы решить задачу in-place c O(1) дополнительной памяти? Пример 1: Input: s = "the sky is blue" Output: "blue is sky the" Пример 2: Input: s = " hello world " Output: "world hello" Пример 3: Input: s = "a good example" Output: "example good a" Ограничения: 1 <= s.length <= 10⁴ s содержит буквы английского алфавита (в нижнем и верхнем регистре), цифры и пробелы ' '. s состоит хотя бы из одного слова. НАШ ЧАТ АЛГОРИТМИСТОВ Решение Так как в питоне строки неизменяемы, мы не можем реализовать решение in-place с O(1) дополнительной памяти. Преобразуем строку в список строк методом split(), автоматически удаляя лишние пробелы - O(n). Используем два указателя: left - индекс первого слова в списке right - индекс последнего слова Пока left меньше right: - меняем местами элементы под индексом left с элементами под индексом right; - сдвигаем указатели навстречу друг другу. В конце объединяем слова списка в строку через один пробел и возвращаем её. Делитесь решением на вашем языке с O(1) дополнительной памяти в комментариях! Сложность O(n) - по времени (сплит и обход списка строк) O(n) - по памяти (храним список строк) Код class Solution: def reverseWords(self, s: str) -> str: words = s.split() left, right = 0, len(words) - 1 while left < right: words[left], words[right] = words[right], words[left] left += 1 right -= 1 return " ".join(words) @algoses

Ваше исследование стоит того, чтобы о нем рассказать На междисциплинарной молодежной конференции Центрального университета см
Ваше исследование стоит того, чтобы о нем рассказать На междисциплинарной молодежной конференции Центрального университета сможете не просто выступить, но и получить публикацию тезисов в РИНЦ и поддержку опытных исследователей. Студентам, аспирантам и молодым ученым доступны 6 секций: гуманитарные и естественные науки, ИИ, математика, бизнес и кибербезопасность. Секцию по кибербезу делаем совместно с факультетом ВМК МГУ. И да, будут не только доклады: пленарные сессии с учеными и инди-группа тоже в программе. Конференция пройдет 17 мая, но тезисы нужно подать до 3 мая Не готовы выступать? Приходите слушать. Регистрация — до 12 мая.

🚀Интенсивы к ШАД: экспресс подготовка за 2 недели Товарищи, первый этап отбора в ШАД начинается уже 30 апреля. Мы открываем
🚀Интенсивы к ШАД: экспресс подготовка за 2 недели Товарищи, первый этап отбора в ШАД начинается уже 30 апреля. Мы открываем наши интенсивы с разбором первого этапа, чтобы вы успели подготовиться за оставшееся время. ➡️Интенсив подойдёт, если: 🔵 поступаешь в ШАД в этом году и хочешь натаскаться за короткий срок 🔵 знаешь школьную программу, ведь этого достаточно для старта, все остальное мы возьмем на себя 🔵 уже готовился, но чувствуешь пробелы в отдельных темах 🔵 хочешь довести решение задач до автоматизма и научиться оформлять решение на полный балл ➡️ Доступны интенсивы по направлениям: ⬇️ Алгоритмы ⬇️ Теория вероятностей ⬇️ Линейная алгебра ⬇️ Математический анализ ⬇️ Дискретная математика ➡️Что внутри каждого интенсива: 🔵 Систематизированная теория + конспекты + ДЗ с проверкой от преподавателя 🔵 8 пробников и их разбор 🔵 Закрытая база заданий ШАД 🔵 Консультации и поддержка преподавателя во время отборочных 🔵 Мок-интервью к собеседованию ➡️Как устроен интенсив: Весь материал, который нужен к первому этапу шад будет разобран до 1 мая. Весь материал, который нужен ко второму этапу будет разобран до 15 мая. На каждом курсе 3 живых семинара. 💰До 18 апреля скидки 35%: Цена за 1 интенсив - 9 150 5 950 ₽ При покупке 2-х интенсивов - 18 300 10 900 ₽ При покупке 3-х интенсивов - 27 450 14 850 ₽ При покупке 4-х интенсивов - 36 600 17 800 ₽ При покупке от трёх и более + дискра в подарок 📌 Времени остается немного, начать подготовку нужно уже сейчас! Для вопросов и записи на курсы напишите менеджеру

В новом ролике обсудим изи темку, как получать офферы на 10 000$. Смотрим! Смотрим! https://www.youtube.com/watch?v=ovYjaPpV6
В новом ролике обсудим изи темку, как получать офферы на 10 000$. Смотрим! Смотрим! https://www.youtube.com/watch?v=ovYjaPpV6pw

Задача с собеседования в Zopsmart Дан массив nums, состоящий из n объектов, окрашенных в красный, белый и синий цвета. Отсортируйте их in-place так, чтобы объекты одного цвета оказались соседними, следуя порядку: красные, белые, синие. Будем использовать целые числа 0, 1 и 2 для обозначения красного, белого и синего, соответственно. Решите задачу без использования встроенной функции сортировки. Follow up: можете ли вы реализовать однопроходный алгоритм, использующий только константную дополнительную память? Пример 1: Input: nums = [2,0,2,1,1,0] Output: [0,0,1,1,2,2] Пример 2: Input: nums = [2,0,1] Output: [0,1,2] Ограничения: n == nums.length 1 <= n <= 300 nums[i] is either 0, 1, or 2. НАШ ЧАТ АЛГОРИТМИСТОВ Сборник алгоритмический задач с собесов Решение Базовое решение: двухпроходный алгоритм с сортировкой подсчётом. При первом проходе - подсчитываем кол-во 0, 1 и 2. При втором - перезаписываем массив, помещая сначала все 0, затем все 1 и, наконец, все 2. Сложность такого алгоритма: O(n) - по времени (проходим по массиву два раза) и O(1) - по памяти (храним только три переменные, перезаписываем массив in-place). Однако, предлагаю реализовать решение с использованием однопроходного алгоритма (follow-up). Для этой задачи подойдёт алгоритм "Национальный флаг Нидерландов", использующийся для сортировки массива с тремя различными значениями за один проход. Основная идея в разделении массива на три части (по типу цветовых границ на флаге) и использовании трёх указателей: low (сначала равен нулю) - отслеживает границу, где должны заканчиваться 0; mid (сначала равен нулю) - проходит по массиву слева направо; high (сначала равен len(nums) - 1) - отслеживает границу, где должны начинаться 2. Идём по массиву указателем mid, пока mid <=high: Если текущий элемент равен 0: меняем его местами с элементом под индексом low и увеличиваем значения обоих указателей; Если текущий элемент равен 1: оставляем его на месте и сдвигаем указатель mid вперёд; Иначе, если текущий элемент равен 2: меняем его местами с элементом под индексом high и уменьшаем значение указателя high. Указатель mid не сдвигается, так как нужно проверить эл-т, который пришёл из правой части. Сложность O(n) - по времени O(1) - по памяти Код class Solution: def sortColors(self, nums: List[int]) -> None: """ Do not return anything, modify nums in-place instead. """ low, mid = 0, 0 high = len(nums) - 1 while mid <= high: if nums[mid] == 0: nums[mid], nums[low] = nums[low], nums[mid] mid += 1 low += 1 elif nums[mid] == 1: mid += 1 else: nums[mid], nums[high] = nums[high], nums[mid] high -= 1 @algoses

Алгоритмические задачи - это не только про найм. Это способ проверить, как ты думаешь: работаешь ли с ограничениями, замечаеш
Алгоритмические задачи - это не только про найм. Это способ проверить, как ты думаешь: работаешь ли с ограничениями, замечаешь ли крайние случаи и умеешь ли упрощать сложное. Сейчас есть возможность сделать это на практике. Решайте задачу от Ильи Царева, руководителя разработки Яндекс Go, до 12.00 12 апреля. Правильное решение даёт шанс попасть на конференцию Day&Night* Городских сервисов Яндекса, которая пройдет 18 апреля в Москве, и выиграть другие призы. Либо через заявку и ожидание, либо интереснее - через челлендж-задачкиии! Задачки тут *День и Ночь

Алгоритмические задачи - это не только про найм. Это способ проверить, как ты думаешь: работаешь ли с ограничениями, замечаеш
Алгоритмические задачи - это не только про найм. Это способ проверить, как ты думаешь: работаешь ли с ограничениями, замечаешь ли крайние случаи и умеешь ли упрощать сложное. Сейчас есть возможность сделать это на практике. Решайте задачу от Ильи Царева, руководителя разработки Яндекс Go, до 12.00 11 апреля. Правильное решение даёт шанс попасть на конференцию Day&Night* Городских сервисов Яндекса, которая пройдет 18 апреля в Москве, и выиграть другие призы. Либо через заявку и ожидание, либо интереснее - через челлендж-задачкиии! Задачки тут *День и Ночь

Задача с собеседования в eBay Дано целое положительное число n. Каждой цифре n присваивается знак в соответствии со следующими правилами: - самой старшей цифре присваивается положительный знак; - каждая следующая цифра имеет знак, противоположный знаку предыдущей цифры. Верните сумму всех цифр с соответствующими знаками. Пример 1: Input: n = 521 Output: 4 Объяснение: (+5) + (-2) + (+1) = 4. Пример 2: Input: n = 111 Output: 1 Объяснение: (+1) + (-1) + (+1) = 1. Пример 3: Input: n = 886996 Output: 0 Объяснение: (+8) + (-8) + (+6) + (-9) + (+9) + (-6) = 0. Ограничения: 1 <= n <= 10⁹ НАШ ЧАТ АЛГОРИТМИСТОВ Решение Сначала разберём базовое решение: Заводим переменные: sign - знак текущей цифры, сначала равняется 1 (самая старшая цифра имеет положительный знак) res - для накопления суммы цифр Преобразуем n в строку, проходим по ней слева направо: - присваиваем знак текущей цифре, умножая её на sign, и прибавляем к res; - меняем sign на противоположный, умножая на -1. Теперь оптимизируем решение, используя только математические операции без строки: В цикле проходим по цифрам числа, от младших разрядов к старшим: - остатком от деления получаем последнюю цифру. Обновляем сумму, вычитая из цифры предыдущий результат. - переходим к следующему разряду, применяя целочисленное деление. Формула гарантирует правильное присвоение знаков, так как вычитание предыдущего результата эквивалентно умножению всех накопленных цифр на -1. К примеру, для n = 521: res = 1 - 0 = 1 res = 2 - 1 = 1 res = 5 - (2 - 1) = 4 => +5 - 2 + 1 = 4 Сложность Базовое: O(log n) - по времени (количество цифр в числе) O(log n) - по памяти (храним строку) Оптимизированное: O(log n) - по времени O(1) - по памяти (храним res) Код Базовое: class Solution: def alternateDigitSum(self, n: int) -> int: n_str = str(n) sign = 1 res = 0 for char in n_str: res = res + int(char) * sign sign *= -1 return res Оптимизированное: class Solution: def alternateDigitSum(self, n: int) -> int: res = 0 while n: res = n % 10 - res n //= 10 return res @algoses

Хочешь в магистратуру, которая реально повлияет на твою карьеру? Центральный университет проводит День открытых дверей ИТ-маг
Хочешь в магистратуру, которая реально повлияет на твою карьеру? Центральный университет проводит День открытых дверей ИТ-магистратуры 6 и 7 апреля, онлайн и офлайн в Москве! Ты узнаешь: — как и на какие программы можно поступить в 2026 году; — как можно получить грант до 75%; — как обучение приводит к работе мечты, а не просто диплому. А также тебя ждут экскурсии по кампусу со студентами и ответы на все вопросы. Регистрируйся и разберись, какое направление действительно тебе подходит

Задача с собеседования в eBay Дан целочисленный массив nums. Переместите все нули в его конец, сохранив при этом относительный порядок ненулевых элементов. Обратите внимание, что необходимо сделать это in-place, без создания копии массива. Пример 1: Input: nums = [0,1,0,3,12] Output: [1,3,12,0,0] Пример 2: Input: nums = [0] Output: [0] Ограничения: 1 <= nums.length <= 10⁴ -2³¹ <= nums[i] <= 2³¹ - 1 НАШ ЧАТ АЛГОРИТМИСТОВ Решение Используем метод двух указателей, идём по массиву в одном направлении слева направо: l - позиция, куда нужно поставить следующее ненулевое число r - проходит по всем элементам массива Проходим по массиву указателем r: если r указывает на ненулевой элемент, меняем его местами с элементом на позиции l и двигаем левый указатель. После завершения итерации с индексом r: - все элементы до l будут ненулевыми; - все элементы от l до r включительно - нули. Вывод результата не требуется. Решение соблюдает принцип in-place (работаем с исходным массивом) и сохраняет порядок ненулевых элементов. Сложность O(n) - по времени (проходим по массиву один раз) O(1) - по памяти (используем две переменные, изменяем только исходный массив) Код class Solution: def moveZeroes(self, nums: List[int]) -> None: """ Do not return anything, modify nums in-place instead. """ l = 0 for r in range(len(nums)): if nums[r] != 0: nums[l], nums[r] = nums[r], nums[l] l += 1 @algoses

Хэнбук по алгоритмам ШАД Собрали и разобрали все задачи с собеседований в ШАД. Привели необходимую теорию и задачи для закрепления. Вам же осталось только сесть, разобраться и прорешать - и алгособес в кармане! Еще больше подобных материалов на наших курсах в ШАД, залетаем в ШАД уже этим летом. @postypashki_old