Программа курса:
Разбор задачи: Сжатие диапазонов
Предложенный нами код решения:
def summary_ranges(nums):
"""
Определяет диапазоны в отсортированном массиве чисел и возвращает их в виде строк.
:param nums: List[int], отсортированный массив уникальных целых чисел.
:return: List[str], список строковых диапазонов.
"""
if not nums:
return []
ranges = []
start = nums[0] # Начало текущего диапазона
for i in range(1, len(nums)):
# Если текущий элемент не является последовательным
if nums[i] != nums[i - 1] + 1:
# Добавляем диапазон в результат
if start == nums[i - 1]:
ranges.append(f"{start}")
else:
ranges.append(f"{start}->{nums[i - 1]}")
start = nums[i] # Обновляем начало нового диапазона
# Добавляем последний диапазон
if start == nums[-1]:
ranges.append(f"{start}")
else:
ranges.append(f"{start}->{nums[-1]}")
return ranges1. Проверка на пустой массив
if not nums:
return []
Первый шаг проверяет, является ли массив nums пустым. Если массив пустой, возвращается пустой список, так как в этом случае диапазонов нет.
2. Инициализация переменных
ranges = []
start = nums[0] # Начало текущего диапазона
ranges— список, в который будут добавляться диапазоны в виде строк.start— начало текущего диапазона. Изначально равно первому элементу массива.
3. Итерация по массиву
for i in range(1, len(nums)):
# Если текущий элемент не является последовательным
if nums[i] != nums[i - 1] + 1:
# Добавляем диапазон в результат
if start == nums[i - 1]:
ranges.append(f"{start}")
else:
ranges.append(f"{start}->{nums[i - 1]}")
start = nums[i] # Обновляем начало нового диапазона
Цикл проходит по массиву начиная со второго элемента (индекс 1).
Проверка последовательности чисел:
- Если текущий элемент
nums[i]не является последовательным (не равен предыдущему числуnums[i-1] + 1):- Формируется строка диапазона для чисел от
startдоnums[i-1].- Если диапазон состоит из одного числа (
start == nums[i-1]), в список добавляется строка с одним числом. - Если диапазон состоит из нескольких чисел (
start != nums[i-1]), формируется строка в формате"a->b".
- Если диапазон состоит из одного числа (
- Обновляется начало нового диапазона (
start = nums[i]).
- Формируется строка диапазона для чисел от
4. Добавление последнего диапазона
if start == nums[-1]:
ranges.append(f"{start}")
else:
ranges.append(f"{start}->{nums[-1]}")
После завершения цикла последний диапазон еще не добавлен в список. Этот код выполняет:
- Если последний диапазон состоит из одного числа (
start == nums[-1]), добавляется это число. - Если диапазон содержит несколько чисел, добавляется строка в формате
"a->b".
5. Возврат результата
return ranges
Функция возвращает список ranges, содержащий строки с диапазонами чисел.
Пример работы
Входные данные:
nums = [0, 1, 2, 4, 5, 7]
Ход выполнения:
start = 0.- Проход по массиву:
nums[1] = 1: последовательность продолжается.nums[2] = 2: последовательность продолжается.nums[3] = 4: последовательность прерывается. Добавляется"0->2",start = 4.nums[4] = 5: последовательность продолжается.nums[5] = 7: последовательность прерывается. Добавляется"4->5",start = 7.
- Добавляется последний диапазон
"7".
Итоговый результат:
["0->2", "4->5", "7"]
Вы должны Войти или Зарегистрироваться чтобы оставлять комментарии