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:
- Rendezze a számokat tartalmazó tömböt.
- Iteráljon a rendezett listán, és alakítson ki aktuális tartományt.
- Ha a következő elem szomszédos (aktuális + 1), bővítse a tartományt.
- 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)]