Sobes.tech
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:

  1. Sortirati niz brojeva.
  2. Iterirati kroz sortiranu listu, formirajući trenutni opseg.
  3. Ako je sledeći element susedni (trenutni + 1), proširiti opseg.
  4. 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)]