Привет! Сегодняшний пост может быть скучным для тех, кто уже давно нашел себе стажировку / работу, но нас чита…

Другое 15.07.2026 · 👁 3 960 просмотров
Привет! Сегодняшний пост может быть скучным для тех, кто уже давно нашел себе стажировку / работу, но нас читают не только люди, которые уже нашли себе работу, но и те, кто только ее ищут. Я уже писал про то, что зачастую во многих собеседованиях, где есть алгосы для ml специалистов фигурируют в основном 3 идеи: два указателя, hash-map-ы, сортировка - примерно в таком ранжировании. Разберем 3 задачи. 1. Два указателя (easy на литкоде, но часто спрашивают): https://leetcode.com/problems/valid-palindrome-ii/ Проверить, можно ли у входящей строки удалить не более 1 символа, чтоб получился палиндром. Основная мысль тут такая - давайте просто будем смотреть слева и справа - совпадают ли наши символы. Если да, то давайте просто двигаться смещаясь к центру. Если в какой то момент мы нашли два различных символа, то не удалив их, у нас никак не получиться палиндром. Пробуем удалить 1 - смотрим получился ли у нас палиндром, пробуем удалить второй смотрим - получился ли у нас палиндром. Если хотя бы в одном случае да, то возвращаем true, иначе false. class Solution: def validPalindrome(self, s: str) -> bool: def isPalindrome(l, r): while l < r: if s[l] != s[r]: return False l += 1 r -= 1 return True left, right = 0, len(s) - 1 while left < right: if s[left] != s[right]: return isPalindrome(left + 1, right) or isPalindrome(left, right - 1) left += 1 right -= 1 return True 2. Hash Map: https://leetcode.com/problems/longest-consecutive-sequence/?envType=problem-list-v2&envId=hash-table . Найти наибольший по длине отрезок последовательных чисел (+=1). Достаточно красивая идейно задача. Каждый набор чисел из входа можно представить как объединение отрезков последовательных чисел. Давайте найдем минимальные числа отрезков и будем наращивать их длину инкрементируясь, пока не найдем конец отрезка. Утверждается, что пробежавшись только по минимальным и наращивая отрезок от них мы переберем все числа (из соображений выше). class Solution: def longestConsecutive(self, nums: List[int]) -> int: num_set = set(nums) longest_consecutive_sequence = 0 for num in nums: if num - 1 not in num_set: current_number = num current_consecutive_sequence = 1 while current_number + 1 in num_set: current_number += 1 current_consecutive_sequence += 1 longest_consecutive_sequence = max( longest_consecutive_sequence, current_consecutive_sequence ) return longest_consecutive_sequence 3. Sorting: https://leetcode.com/problems/largest-number/solutions/5785445/best-solution-simplified-easy-approach-j-ha3v/?envType=problem-list-v2&envId=sorting По массиву чисел вернуть их строкой в конкатеннированном виде, чтоб число было максимальным (склеенное) Тут основная мысль задачи в том, что чтоб составить наибольшее по значению число надо как-то правильно отсортировать строки. Давайте придумаем умный компаратор, который будет сравнивать склейку строк ab vs ba. Отсортировав так массив строк-чисел и склеив их - получим желаемый результат. Не забываем крайний случай с 0. class Solution: def largestNumber(self, nums: List[int]) -> str: from functools import cmp_to_key strs = list(map(str, nums)) def compare(a, b): if a + b > b + a: return -1 # a до b elif a + b < b + a: return 1 # b до a else: return 0 # equal strs.sort(key=cmp_to_key(compare)) if strs[0] == "0": return "0" return ''.join(strs) Надеюсь, даже в таких задачах вы увидели какие-то свежие идеи. Применяйте их в собеседованиях! Всем хорошей среды! @zadachi_ds
Откликнуться в Telegram →

⚠️ Никогда не платите «за оформление» или «гарантию трудоустройства» — это признак мошенников. Работа ТРУ не несёт ответственности за содержание вакансии.

🇮🇱 Не нашли подходящую зарплату? В Израиле платят от $3000 Без языка и опыта · жильё и легализация под ключ · официально Смотреть вакансии →