Sobes.tech
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:

  1. Posortować tablicę liczb.
  2. Iterować po posortowanej liście, tworząc bieżący zakres.
  3. Jeśli następny element jest sąsiedni (obecny + 1), rozszerzyć zakres.
  4. 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)]