Middle — Senior
Aprašykite užduotį suartėjusių skaičių sujungimui į intervalus.
sobes.tech AI
Atsakymas iš AI
Užduotis sujungti šalia esančius skaičius į intervalus yra sukurti minimalų nuoseklių intervalų (diapazonų) skaičių, kurie apima visus šiuos skaičius be spragų.
Pavyzdžiui, yra skaičių: [1, 2, 3, 5, 6, 8]
Sujungimo rezultatas:
- [1-3]
- [5-6]
- [8]
Tai naudinga optimizuojant duomenų saugojimą ar rodymą, kai nuoseklūs skaičiai gali būti glaustai pateikti kaip diapazonas.
Pagrindiniai sprendimo žingsniai:
- Surūšiuoti skaičių masyvą.
- Iteruoti per surūšiuotą sąrašą, formuojant esamą diapazoną.
- Jei sekantis elementas yra šalia (esamas + 1), išplėsti diapazoną.
- Jei ne, išsaugoti esamą diapazoną ir pradėti naują.
Algoritmo sudėtingumas — O(n log n) dėl rūšiavimo, kur n yra skaičių kiekis.
Python pavyzdys:
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
# Pavyzdys
print(collapse_ranges([1,2,3,5,6,8])) # [(1,3), (5,6), (8,8)]