Sobes.tech
Middle — Senior

Опишете задачата за групиране на съседни числа в диапазони.

sobes.tech AI

Отговор от 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)]