Sobes.tech
Middle — Senior

Yaqin raqamlarni diapazonlarga ajratish vazifasini tavsiflang.

sobes.tech AI

AIdan javob

Yaqin raqamlarni diapazonlarga birlashtirish vazifasi, bu raqamlardan tashkil topgan to'plamdan barcha raqamlarni qamrab oladigan minimal davomiy interval (diapazonlar) sonini shakllantirishdir.

Masalan, raqamlar: [1, 2, 3, 5, 6, 8]

Birlashtirish natijasi:

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

Bu, ketma-ket raqamlarni diapazon sifatida kompakt tarzda taqdim etish mumkin bo'lganda, ma'lumotlarni saqlash yoki ko'rsatishni optimallashtirish uchun foydalidir.

Asosiy qadamlar:

  1. Raqamlar massivini tartiblash.
  2. Tartiblangan ro'yxat bo'yicha iteratsiya qilish, joriy diapazonni shakllantirish.
  3. Agar keyingi element yonma-yon bo'lsa (hozirgi + 1), diapazonni kengaytirish.
  4. Aks holda, joriy diapazonni saqlash va yangi boshlash.

Algoritmning murakkabligi — O(n log n), tartiblash sababli, bu yerda n raqamlar soni.

Python misoli:

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

# Misol
print(collapse_ranges([1,2,3,5,6,8]))  # [(1,3), (5,6), (8,8)]