Middle — Senior
Опишете задачата за групиране на съседни числа в диапазони.
sobes.tech AI
Отговор от 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)]