Middle — Senior
39
Опишите задачу сворачивания соседних чисел в диапазоны?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Задача сворачивания соседних чисел в диапазоны заключается в том, чтобы из набора чисел сформировать минимальное количество непрерывных интервалов (диапазонов), покрывающих все эти числа без пропусков.
Например, есть числа: [1, 2, 3, 5, 6, 8]
Результат сворачивания:
- [1-3]
- [5-6]
- [8]
Это полезно для оптимизации хранения или отображения данных, когда последовательные числа можно компактно представить как диапазон.
Основные шаги решения:
- Отсортировать массив чисел.
- Итерироваться по отсортированному списку, формируя текущий диапазон.
- Если следующий элемент является соседним (текущий + 1), расширяем диапазон.
- Если нет — сохраняем текущий диапазон и начинаем новый.
Сложность алгоритма — O(n log n) из-за сортировки, где n — количество чисел.
Пример на Python:
def collapse_ranges(nums):
if not nums:
return []
nums = sorted(set(nums))
ranges = []
start = prev = nums[0]
for num in nums[1:]:
if num == prev + 1:
prev = num
else:
ranges.append((start, prev))
start = prev = num
ranges.append((start, prev))
return ranges
# Пример
print(collapse_ranges([1,2,3,5,6,8])) # [(1,3), (5,6), (8,8)]