Sobes.tech
Middle — Senior

Írja le a szomszédos számok tartományokra való csoportosításának feladatát.

sobes.tech MI

Válasz az MI-től

A szomszédos számok összevonásának feladata az, hogy a számok halmazából a lehető legkevesebb folyamatos intervallumot (tartományt) hozzon létre, amelyek lefedik ezeket a számokat hiányok nélkül.

Például, vannak számok: [1, 2, 3, 5, 6, 8]

Az összevonás eredménye:

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

Ez hasznos az adatok tárolásának vagy megjelenítésének optimalizálásához, amikor a szekvenciális számokat kompakt módon lehet tartományként ábrázolni.

A megoldás fő lépései:

  1. Rendezze a számokat tartalmazó tömböt.
  2. Iteráljon a rendezett listán, és alakítson ki aktuális tartományt.
  3. Ha a következő elem szomszédos (aktuális + 1), bővítse a tartományt.
  4. Ha nem, mentse el az aktuális tartományt, és kezdjen újat.

Az algoritmus összetettsége — O(n log n) a rendezés miatt, ahol n a számok száma.

Python példával:

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

# Példa
print(collapse_ranges([1,2,3,5,6,8]))  # [(1,3), (5,6), (8,8)]