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

  1. Trier le tableau de nombres.
  2. Itérer sur la liste triée, en formant la plage courante.
  3. Si l'élément suivant est adjacent (actuel + 1), étendre la plage.
  4. 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)]