Sobes.tech
Middle — Senior
39

Опишите задачу сворачивания соседних чисел в диапазоны?

Компании, где спрашивали
VKVK

Ответ от нейросети

sobes.tech AI

Задача сворачивания соседних чисел в диапазоны заключается в том, чтобы из набора чисел сформировать минимальное количество непрерывных интервалов (диапазонов), покрывающих все эти числа без пропусков.

Например, есть числа: [1, 2, 3, 5, 6, 8]

Результат сворачивания:

  • [1-3]
  • [5-6]
  • [8]

Это полезно для оптимизации хранения или отображения данных, когда последовательные числа можно компактно представить как диапазон.

Основные шаги решения:

  1. Отсортировать массив чисел.
  2. Итерироваться по отсортированному списку, формируя текущий диапазон.
  3. Если следующий элемент является соседним (текущий + 1), расширяем диапазон.
  4. Если нет — сохраняем текущий диапазон и начинаем новый.

Сложность алгоритма — 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)]