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:
- Sakārtot skaitļu masīvu.
- Iterēt pa sakārtoto sarakstu, veidojot pašreizējo diapazonu.
- Ja nākamais elements ir blakus (pašreizējais + 1), paplašināt diapazonu.
- 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)]