4.7Kпросмотров
59.3%от подписчиков
23 января 2026 г.
Score: 5.1K
Здравствуйте, мои маленькие любители DS/ML. Сегодня поговорим про то, как мой старый школьный друг проходил собеседование в зеленую компанию. Материал вполне себе исчерпывающий и полезный. Какие то вещи я видел впервые. # Алгосы в Сбере — что спрашивали на собесе ## Знакомство Короткий спич про себя и опыт. ## Максимальная серия одинаковых символов Задача: дана строка, найти символ, который встречается подряд максимальное число раз. Пример: bbccccbbbdd -> c ## Line reflection Я сказал, что решал эту задачу “тысячу раз”, поэтому мне дали другую. Иначе собес мог бы закончиться минут за 20–25. ## Матрица nm -> подматрица n’m’ с максимальным средним n’ и m’ даны. Нужно найти подматрицу фиксированного размера с максимальным average (эквивалентно — с максимальной суммой, потому что размер фиксированный). Я предложил решение через одномерные префиксные суммы по строкам. Оно получается неоптимальным в случае, когда подматрица по сути “вырождается в столбец”. До двумерных префиксных сумм на собесе не дошёл. ## Вопросы по Python а) За сколько работает добавление n строк длины k в set() б) Куча вопросов на мутабельность/иммутабельность и ссылки/GC. Примеры: - a = 1; b = a; a += 1. Чему равно b? - a = [1, 2], b = [a], a[0] = b. Когда (после какой строчки) сборщик мусора в теории может удалить b? # Запись “как есть” (то, что писал себе) ## Максимальная серия символов (код) Дана строка, необходимо найти символ, который встречается подряд максимальное число раз. Пример: bbccccbbbdd -> c `python def max_count(s: str) -> str: if len(s) == 1: return s mx = 1 cur_ans = s last_seen = s cur_cnt = 1 for c in s[1:]: if c == last_seen: cur_cnt += 1 else: last_seen = c cur_cnt = 1 if cur_cnt > mx: mx = cur_cnt cur_ans = last_seen return cur_ans Подматрица с максимальным средним (код) Дана матрица A размера hw, элементы int32. Нужно найти подматрицу размера khkw, в которой среднее значение максимально (то же самое, что максимальная сумма). Мой набросок: префиксные суммы по строкам, дальше перебор по всем позициям и суммирование по kh строкам. python def segment_sum(pref: list[int], l: int, r: int) -> int: return pref[r + 1] - pref[l] def max_submatrix(A: list[list[int]], w: int, h: int, kw: int, kh: int) -> tuple[int, int]: pref_sums = [[] for _ in range(h)] for i, row in enumerate(A): pref_sum = (w + 1) for j, elem in enumerate(row): pref_sum[j + 1] = pref_sum[j] + elem pref_sums[i] = pref_sum mx = float("-inf") ans = (-1, -1) for y in range(h - kh + 1): for x in range(w - kw + 1): sm = sum(segment_sum(pref_sums[y + i], x, x + kw - 1) for i in range(kh)) if sm > mx: mx = sm ans = (y, x) return ans # память: O(wh) на префиксы # время: O((h-kh+1)(w-kw+1)kh) Line reflection (вертикальная ось симметрии) Дан массив точек с целочисленными координатами (x, y). Нужно понять, существует ли вертикальная прямая x = x0, делящая точки на 2 множества, симметричные относительно этой прямой. Идея: берём xmin и xmax по всем точкам кандидат на ось: x0 = (xmin + xmax) / 2 для каждой точки (x, y) должна существовать точка (x’, y) такая, что x + x’ = xmin + xmax Python-часть (что вспоминалось) Про сложность set: “за сколько отработает добавление n одинаковых строк длины k в set()” Про float: 2.0100 == 2.0100 + 1 Про with/open: with open(...) as f: ... когда реально вызывается close() Про MRO/наследование: python class A: def hello(self): print("A") class B(A): def hello(self): print("B") class C(A): def hello(self): print("C") class D(B, C): pass d = D() d.hello() Про ссылки / мутабельность / сборщик мусора: a = [] b = a a = 0 a = b = a a = 0 b = 0 a = b = [a] a = b a = 0 b = 0
4.7K
просмотров
3928
символов
Нет
эмодзи
Нет
медиа

Другие посты @zadachi_ds

Все посты канала →
Здравствуйте, мои маленькие любители DS/ML. Сегодня поговори — @zadachi_ds | PostSniper