Sobes.tech
Middle — Senior

Descreva a tarefa de agrupar números adjacentes em intervalos.

sobes.tech IA

Resposta da IA

A tarefa de fundir números adjacentes em intervalos consiste em formar o menor número possível de intervalos contínuos (intervalos) que cubram todos esses números sem omissões.

Por exemplo, há números: [1, 2, 3, 5, 6, 8]

Resultado da fusão:

  • [1-3]
  • [5-6]
  • [8]

Isto é útil para otimizar o armazenamento ou a visualização de dados, quando números sequenciais podem ser representados de forma compacta como um intervalo.

Principais passos da solução:

  1. Ordenar o array de números.
  2. Iterar sobre a lista ordenada, formando o intervalo atual.
  3. Se o próximo elemento for adjacente (atual + 1), expandir o intervalo.
  4. Caso contrário, guardar o intervalo atual e iniciar um novo.

A complexidade do algoritmo é — O(n log n) devido à ordenação, onde n é a quantidade de números.

Exemplo em 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

# Exemplo
print(collapse_ranges([1,2,3,5,6,8]))  # [(1,3), (5,6), (8,8)]