---
# ─────────────────────────────────────────────
# ШАБЛОН разбора алгоритмической задачи
# Скопируй этот файл в нужную папку категории,
# переименуй и заполни секции.
# ─────────────────────────────────────────────
title: ""
difficulty: ""      # Easy / Medium / Hard
category: ""        # Two Pointers, Hash Table, Sliding Window, ...
leetcode_id: ""
revision_count: 0   # увеличивай после каждого повтора
last_revision:      # дата последнего повторения
---

# [TITLE]

> **LeetCode:** [#LEETCODE_ID](https://leetcode.com/problems/.../)
> **Сложность:** DIFFICULTY
> **Категория:** CATEGORY

## Условие

_Краткая формулировка задачи (1–3 предложения)._

```
Input:   →  Output:
Input:   →  Output:
```

## Ключевая идея

_Одним-двумя предложениями: в чём трюк, который решает задачу. Это первое, что должно всплывать в памяти._

## Оценка сложности

- **Время:** O(...)
- **Память:** O(...)

## Решение (Ruby)

```ruby
# clean, short Ruby implementation
```

## Разбор на примере

_Пройди пошагово на одном из примеров. Покажи, как меняются ключевые переменные/структуры на каждом шаге._

```
Input:
Step 1: ...
Step 2: ...
Result:
```

## Edge Cases

_Граничные случаи: пустой вход, один элемент, отрицательные числа, переполнение, дубликаты._

## Типичные ошибки

_Что чаще всего идёт не так: забытый базовый случай, off-by-one, неправильная инициализация._

## Альтернативные подходы

_От худшего к лучшему. Какая сложность у каждого? Почему финальный — оптимальный?_

| Подход | Время | Память | Комментарий |
|--------|-------|--------|-------------|
| Brute-force | O(...) | O(...) | |
| Оптимизация | O(...) | O(...) | |
| **Оптимальный** | **O(...)** | **O(...)** | **финальное решение** |

## Заметки после повторения

_Что забыл? Что пошло не так? На чём застрял? Заполни после каждой тренировки._