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:
- Ordenar o array de números.
- Iterar sobre a lista ordenada, formando o intervalo atual.
- Se o próximo elemento for adjacente (atual + 1), expandir o intervalo.
- 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)]