Middle — Senior
Beschrijf de taak van het groeperen van aangrenzende getallen in bereiken.
sobes.tech AI
Antwoord van AI
De taak om aangrenzende nummers samen te voegen in bereiken, bestaat uit het vormen van het minimale aantal continue intervallen (bereiken) die al deze nummers zonder onderbrekingen dekken.
Bijvoorbeeld, er zijn nummers: [1, 2, 3, 5, 6, 8]
Het resultaat van samenvoegen:
- [1-3]
- [5-6]
- [8]
Dit is handig voor het optimaliseren van opslag of weergave van gegevens, wanneer opeenvolgende nummers compact kunnen worden weergegeven als een bereik.
Belangrijkste stappen van de oplossing:
- Sorteer de array van nummers.
- Itereer over de gesorteerde lijst, vorm het huidige bereik.
- Als het volgende element aangrenzend is (huidige + 1), breid het bereik uit.
- Zo niet, sla het huidige bereik op en begin een nieuw.
De complexiteit van het algoritme is — O(n log n) vanwege sortering, waarbij n het aantal nummers is.
Voorbeeld in 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
# Voorbeeld
print(collapse_ranges([1,2,3,5,6,8])) # [(1,3), (5,6), (8,8)]