Middle — Senior
Opisz zadanie grupowania sąsiednich liczb w zakresy.
sobes.tech AI
Odpowiedź od AI
Zadanie łączenia sąsiednich liczb w zakresy polega na utworzeniu minimalnej liczby ciągłych przedziałów (zakresów), które obejmują wszystkie te liczby bez pominięć.
Na przykład, mamy liczby: [1, 2, 3, 5, 6, 8]
Wynik łączenia:
- [1-3]
- [5-6]
- [8]
Jest to przydatne do optymalizacji przechowywania lub wyświetlania danych, gdy kolejne liczby można zwięźle przedstawić jako zakres.
Główne kroki rozwiązania:
- Posortować tablicę liczb.
- Iterować po posortowanej liście, tworząc bieżący zakres.
- Jeśli następny element jest sąsiedni (obecny + 1), rozszerzyć zakres.
- Jeśli nie, zapisać bieżący zakres i rozpocząć nowy.
Złożoność algorytmu — O(n log n) z powodu sortowania, gdzie n to liczba liczb.
Przykład w Pythonie:
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
# Przykład
print(collapse_ranges([1,2,3,5,6,8])) # [(1,3), (5,6), (8,8)]