Middle — Senior
Жакын саноолорду диапазонго топтоо тапшырмасын сүрөттөп бериңиз.
sobes.tech AI
AIден жооп
Жакын сандарды диапазонго бириктирүү тапшылыгы — бул ушул сандарды камтыган топтомдон бардык сандарды жаба турган минималдуу узундуктагы үзгүлтүксүз интервалдар (диапазондор) түзүү.
Мисалы, сандар: [1, 2, 3, 5, 6, 8]
Бириктирүүнүн жыйынтыгы:
- [1-3]
- [5-6]
- [8]
Бул ыкма маалыматтарды сактоо же көрсөтүүнү оптималдаштырууга пайдалуу, эгерде үзгүлтүксүз сандарды компакт түрдө көрсөтүү мүмкүн болсо.
Чечимдин негизги кадамдары:
- Сан массивин сорттоо.
- Сорттолгон тизмеде өтүп, учурдагы диапазонду түзүү.
- Эгер кийинки элемент жакын болсо (азыркы + 1), диапазонду кеңейтүү.
- Эгер жок болсо, учурдагы диапазонду сактап, жаңысын баштоо.
Алгоритмдин татаалдыгы — O(n log n), сорттоого байланыштуу, анда n — сандардын саны.
Python мисалы:
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
# Мисал
print(collapse_ranges([1,2,3,5,6,8])) # [(1,3), (5,6), (8,8)]