46просмотров
11.9%от подписчиков
25 марта 2026 г.
Score: 51
🧠 Interview Thinking Найди два числа в массиве, дающих целевую сумму Классика. Есть в каждом втором собесе. # Дано:
nums = [2, 7, 11, 15]
target = 9 # Вернуть индексы двух чисел, сумма которых == target
# Ответ: [0, 1] (nums[0] + nums[1] = 2 + 7 = 9) Как думает junior: for i in range(len(nums)): for j in range(i + 1, len(nums)): if nums[i] + nums[j] == target: return [i, j] Два цикла, O(n²). Работает — но интервьюер сразу спросит: «Можешь быстрее?» Как думает strong middle: Не ищу пары — ищу дополнение. Для каждого числа x нужно найти target - x. Если хранить уже просмотренные числа в словаре — поиск O(1). def two_sum(nums, target): seen = {} for i, x in enumerate(nums): complement = target - x if complement in seen: return [seen[complement], i] seen[x] = i O(n) время, O(n) память. Один проход. Что хочет услышать интервьюер: Не просто правильный код. А ход мыслей: 1. Назвал наивное решение и его сложность
2. Сам предложил оптимизацию — не ждал подсказки
3. Объяснил trade-off: платим памятью, выигрываем время
4. Проверил edge cases: пустой массив, одно число, дубликаты # Edge case с дубликатами:
nums = [3, 3], target = 6
# seen = {3: 0} → complement = 3 → найден на индексе 0
# Вернём [0, 1] — корректно 🐍Вопросы с собесов -> ProstoPython