Sobes.tech
Middle — Senior

Yaxın ədədləri diapazonlara toplama vəzifəsini təsvir edin.

sobes.tech Süni İntellekt

AI-dan cavab

Yaxın ədədləri diapazonlara birləşdirmək vəzifəsi, bu ədədlərdən ibarət toplusundan bütün bu ədədləri əhatə edən minimal ardıcıl interval (diapazonlar) yaratmaqdır.

Məsələn, ədədlər: [1, 2, 3, 5, 6, 8]

Birləşdirmənin nəticəsi:

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

Bu, ardıcıl ədədləri diapazon kimi qısa şəkildə təqdim etmək mümkün olduqda, məlumatların saxlanması və ya göstərilməsini optimallaşdırmaq üçün faydalıdır.

Həllin əsas addımları:

  1. Rəqəmlər massivini sıralayın.
  2. Sıralanmış siyahı üzərində iterasiya edərək cari diapazonu formalaşdırın.
  3. Əgər növbəti element qonşudursa (hazırkı + 1), diapazonu genişləndirin.
  4. Əks halda, cari diapazonu yadda saxlayın və yeni birini başlayın.

Algoritmin mürəkkəbliyi — O(n log n), sıralama səbəbindən, burada n ədədlərin sayıdır.

Python nümunəsi:

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

# Nümunə
print(collapse_ranges([1,2,3,5,6,8]))  # [(1,3), (5,6), (8,8)]