Middle — Senior
Опишите задатак груписања суседних бројева у опсеге.
sobes.tech АИ
Одговор од АИ
Zadatak spajanja susednih brojeva u opsege sastoji se u formiranju minimalnog broja kontinuiranih intervala (opsega) koji pokrivaju sve te brojeve bez propusta.
Na primer, postoje brojevi: [1, 2, 3, 5, 6, 8]
Rezultat spajanja:
- [1-3]
- [5-6]
- [8]
Ovo je korisno za optimizaciju skladištenja ili prikaza podataka, kada se uzastopni brojevi mogu sažeto predstaviti kao opseg.
Glavni koraci rešenja:
- Sortirati niz brojeva.
- Iterirati kroz sortiranu listu, formirajući trenutni opseg.
- Ako je sledeći element susedni (trenutni + 1), proširiti opseg.
- Ako nije, sačuvati trenutni opseg i započeti novi.
Složenost algoritma je — O(n log n) zbog sortiranja, gde je n broj brojeva.
Primer u Pythonu:
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
# Primer
print(collapse_ranges([1,2,3,5,6,8])) # [(1,3), (5,6), (8,8)]