Sobes.tech
Middle — Senior

Aprakstiet uzdevumu blakus esošo skaitļu grupēšanu diapazonos.

sobes.tech AI

Atbilde no AI

Uzdevums apvienot blakus esošos skaitļus diapazonos ir izveidot minimālo nepārtrauktu intervālu (diapazonu) skaitu, kas aptver visus šos skaitļus bez pārtraukumiem.

Piemēram, ir skaitļi: [1, 2, 3, 5, 6, 8]

Apvienošanas rezultāts:

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

Tas ir noderīgi datu glabāšanas vai attēlošanas optimizācijai, kad secīgi skaitļi var tikt kompakti attēloti kā diapazons.

Galvenie risinājuma soļi:

  1. Sakārtot skaitļu masīvu.
  2. Iterēt pa sakārtoto sarakstu, veidojot pašreizējo diapazonu.
  3. Ja nākamais elements ir blakus (pašreizējais + 1), paplašināt diapazonu.
  4. Ja nē, saglabāt pašreizējo diapazonu un sākt jaunu.

Algoritma sarežģītība — O(n log n) sakārtošanas dēļ, kur n ir skaitļu skaits.

Python piemērs:

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

# Piemērs
print(collapse_ranges([1,2,3,5,6,8]))  # [(1,3), (5,6), (8,8)]