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)]