Sobes.tech
Middle — Senior

Жакын саноолорду диапазонго топтоо тапшырмасын сүрөттөп бериңиз.

sobes.tech AI

AIден жооп

Жакын сандарды диапазонго бириктирүү тапшылыгы — бул ушул сандарды камтыган топтомдон бардык сандарды жаба турган минималдуу узундуктагы үзгүлтүксүз интервалдар (диапазондор) түзүү.

Мисалы, сандар: [1, 2, 3, 5, 6, 8]

Бириктирүүнүн жыйынтыгы:

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

Бул ыкма маалыматтарды сактоо же көрсөтүүнү оптималдаштырууга пайдалуу, эгерде үзгүлтүксүз сандарды компакт түрдө көрсөтүү мүмкүн болсо.

Чечимдин негизги кадамдары:

  1. Сан массивин сорттоо.
  2. Сорттолгон тизмеде өтүп, учурдагы диапазонду түзүү.
  3. Эгер кийинки элемент жакын болсо (азыркы + 1), диапазонду кеңейтүү.
  4. Эгер жок болсо, учурдагы диапазонду сактап, жаңысын баштоо.

Алгоритмдин татаалдыгы — 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)]