TGViewer
Библиотека Go для собеса | вопросы с собеседований Библиотека Go для собеса | вопросы с собеседований @go_interview_lib · 7.47K subscribers
Post #1393 1.52K
Как найти два числа с заданной суммой за O(n)

Наивное решение это два вложенных цикла и O(n²). Оптимальное использует map. Для каждого элемента вычисляем complement = target - s[i] и смотрим, есть ли он уже в map. Если есть, нашли пару. Если нет, кладём текущий элемент в map и идём дальше.

func twoSum(nums []int, target int) (int, int) {
seen := make(map[int]int) // значение -> индекс
for i, v := range nums {
if j, ok := seen[target-v]; ok {
return j, i
}
seen[v] = i
}
return -1, -1
}


Сначала ищем complement в map, только потом добавляем текущий элемент. Это защищает от ложного совпадения с самим собой при target = 2 * v.

🐸 Библиотека Go для собеса
  • ❤ 3
  • 🔥 1
More from @go_interview_lib
  1. Sep 18, 2026А вы уже забрали свой подарок ко Дню программиста? К вашему профессиональному празднику Tp…
  2. Sep 15, 2026❓ Какой максимальный размер бинарного файла можно собрать В Go нет встроенного ограничения…
  3. Sep 15, 2026😭 Как не потратить недельный лимит AI-кодинга за три дня? Разберём на вебинаре, как трати…
  4. Aug 4, 2026❓ Объясните разницу между безопасным доступом к байтам строки через срез и использованием…
  5. Aug 4, 2026Покупать новый курс каждый раз, когда меняется рабочая задача, — довольно странная механик…
  6. Aug 4, 2026👅 Самое сложное — выбрать не курс, а направление Сегодня хочется разобраться в AI-агентах…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →