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:
- Sortează array-ul de numere.
- Iterează peste lista sortată, formând intervalul curent.
- Dacă elementul următor este adiacent (curent + 1), extinde intervalul.
- 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)]