Sobes.tech
Middle — Senior

Descrieți sarcina de a grupa numerele adiacente în intervale.

sobes.tech AI

Răspuns de la AI

Sarcina de a combina numerele adiacente în intervale constă în formarea celui mai mic număr de intervale continue (intervale) care acoperă toate aceste numere fără omisiuni.

De exemplu, există numere: [1, 2, 3, 5, 6, 8]

Rezultatul combinării:

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

Acest lucru este util pentru optimizarea stocării sau afișării datelor, atunci când numerele secvențiale pot fi reprezentate compact ca un interval.

Pașii principali ai soluției:

  1. Sortează array-ul de numere.
  2. Iterează peste lista sortată, formând intervalul curent.
  3. Dacă elementul următor este adiacent (curent + 1), extinde intervalul.
  4. Dacă nu, salvează intervalul curent și începe unul nou.

Complexitatea algoritmului este — O(n log n) din cauza sortării, unde n este numărul de numere.

Exemplu î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

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