---
round: 1
ticket_no: 10
source_no: 8
slug: two-sum
topic: Hash Table
difficulty: Easy
leetcode_id: 1
attempted: true
score: 1
verdict: failed
reviewed_at: 2026-09-12
---

# Билет 10 — Two Sum

## Условие (как предъявлено)

Дан массив целых чисел `nums` и целое число `target`. Нужно вернуть индексы двух чисел, дающих в сумме `target`. Ровно одно решение, один и тот же элемент нельзя использовать дважды. Follow-up: сложность лучше `O(n²)`.

```
Input:  nums = [2,7,11,15], target = 9   →  [0,1]
Input:  nums = [3,2,4],     target = 6   →  [1,2]
Input:  nums = [3,3],       target = 6   →  [0,1]
```

Constraints: `2 <= n <= 10^4`, `-10^9 <= nums[i] <= 10^9`.

## Ответ

> Идея такая: мы при первом проходе составляем хэш для всех элементов, где ключом является разница между целевым числом и текущим числом. И записываем его, получается индекс. То есть ещё раз: ключ — это разница, а индекс — это, ну, а значение — это его индекс. Дальше мы проходимся по элементам. То есть берём первый элемент, например, считаем разницу с целевым значением, то есть мы получается понимаем, сколько нам не хватает, и мы ищем в этом хэше, если такой ключ? Если он есть, то мы получили индекс числа, которое нам соответствует. Вот ответ. Если нет, тогда мы переходим ко второму числу. Опять же, смотрим: есть ли такой ключ, который будет дополнять? Нету — идём дальше. Итак, пока не нашли. Нашли и всё. Конец результата. Один у нас — только одно решение.

## Разбор

**Что верно:** направление верное: hash комплементов (target − число) — тот самый приём, который заменяет двойной цикл.

**Что упущено и ошибки:** критичная ошибка: хэш предподсчитывается по всем элементам, поэтому элемент может найти сам себя. nums = [3,2,4], target = 6 → для 3 комплемент 3 даёт индекс 0, ответ [0,0]. Условие «один и тот же элемент нельзя использовать дважды» нарушено. Правильно — один проход и проверка комплемента ДО вставки текущего элемента. Сложность не названа.

**Эталонная идея:** one-pass: map = {}; nums.each_with_index { |v, i| return [map[target - v], i] if map.key?(target - v); map[v] = i }.

**Сложность:** время O(n), память O(n)

**Критерии:** идея ⚠️ · структура данных ✅ · сложность ❌ · граничные случаи ❌


**Разбор задачи:** [`../../algo-solutions/01-must-have/02-hash-table/08-two-sum.md`](../../algo-solutions/01-must-have/02-hash-table/08-two-sum.md)
