Middle — Senior
Décrivez la tâche de regrouper des nombres adjacents en plages.
sobes.tech IA
Réponse de l'IA
La tâche de fusionner des nombres adjacents en plages consiste à former le nombre minimal d'intervalles continus (plages) couvrant tous ces nombres sans omission.
Par exemple, il y a des nombres : [1, 2, 3, 5, 6, 8]
Résultat de la fusion :
- [1-3]
- [5-6]
- [8]
Ceci est utile pour optimiser le stockage ou l'affichage des données, lorsque les nombres séquentiels peuvent être représentés de manière compacte sous forme de plage.
Étapes principales de la solution :
- Trier le tableau de nombres.
- Itérer sur la liste triée, en formant la plage courante.
- Si l'élément suivant est adjacent (actuel + 1), étendre la plage.
- Sinon, enregistrer la plage courante et en commencer une nouvelle.
La complexité de l'algorithme est — O(n log n) en raison du tri, où n est le nombre de nombres.
Exemple en 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
# Exemple
print(collapse_ranges([1,2,3,5,6,8])) # [(1,3), (5,6), (8,8)]