---
round: 3
ticket_no: 11
source_no: 4
slug: summary-ranges
topic: Two Pointers
difficulty: Easy
leetcode_id: 228
attempted: true
score:
verdict:
reviewed_at:
---

# Билет 11 — Summary Ranges

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

Дан отсортированный массив уникальных целых чисел `nums`. Верните наименьший отсортированный список диапазонов, который покрывает все числа массива. Диапазон `[a,b]` представляется строкой `"a->b"`, если `a != b`, и строкой `"a"`, если `a == b`.

```
Input:  nums = [0,1,2,4,5,7]    →  Output: ["0->2","4->5","7"]
Input:  nums = [0,2,3,4,6,8,9]  →  Output: ["0","2->4","6","8->9"]
```

Constraints: `0 <= nums.length <= 20`; `-2^31 <= nums[i] <= 2^31 - 1`; все значения в `nums` уникальны.

## Ответ

> Здесь мы делаем в один проход эту задачу: мы открываем на первом элементе диапазон и дальше идём, пока он непрерывный, мы его накапливаем, как бы сдвигаем правую часть этого диапазона. Если увидели, что следующий элемент у нас прерывает этот диапазон, мы закрываем предыдущий и начинаем на этом месте новый. Ну и здесь правильно нужно написать функцию преобразования диапазона в строку. Если у нас там всего один элемент, то один элемент. Если два и более элемента, тогда разделитель ещё добавляем. Ну и пока до конца не доходим.

## Разбор

**Что верно:**

**Что упущено и ошибки:**

**Эталонная идея:**

**Время:** O(...) — что доминирует

**Память:** O(...) дополнительная (+ O(...) на выход / стек рекурсии)

**Граничные случаи:** 1) ... 2) ... 3) ...

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

**Канон сложности:** сверить с [`../complexity-cheat-sheet.md`](../complexity-cheat-sheet.md) (таблица по 32 задачам)

**Разбор задачи:** [`../../algo-solutions/01-must-have/01-two-pointers/04-summary-ranges.md`](../../algo-solutions/01-must-have/01-two-pointers/04-summary-ranges.md)
