Menu
CoddyTech

3Sum

Vous recevez une liste d’entiers nums. Trouvez chaque triplet [a, b, c] de valeurs prises à trois positions différentes de nums tel que a + b + c = 0. Écrivez chaque triplet dans l’ordre non décroissant (a ≤ b ≤ c) et ne listez chaque triplet distinct qu’une seule fois, même si plusieurs choix de positions permettent de l’obtenir. Renvoyez les triplets triés d’abord par leur première valeur, puis par leur deuxième.

Fonction

threeSum(nums: integer-array) → integer-2d-array
numsinteger-array
la liste d’entiers, comportant au moins trois éléments
Renvoieinteger-2d-array
chaque triplet distinct dont la somme est égale à 0, chacun en ordre non décroissant, la liste triée

Contraintes

  • 3 ≤ nums.length ≤ 3000
  • -105 ≤ nums[i] ≤ 105
  • Au moins un triplet donne une somme de 0.
  • Deux triplets sont identiques lorsqu’ils contiennent les mêmes trois valeurs.

Exemples

Entrée
nums = [-2, 0, 1, 1, -1, 2]
Sortie
[[-2, 0, 2], [-2, 1, 1], [-1, 0, 1]]
Explication
-2 + 0 + 2, -2 + 1 + 1 et -1 + 0 + 1 font tous 0. [-2, 1, 1] peut utiliser la valeur 1 deux fois, car 1 se trouve à deux positions, tandis que [-1, 0, 1] peut être construit avec l’un ou l’autre 1, mais n’apparaît qu’une fois.

lock icon+15 tests cachés à la soumission

challenge icon

Pour aller plus loin

Le même schéma permet de résoudre le problème 4Sum : fixe deux valeurs et utilise deux pointeurs sur le reste. Peux-tu l’écrire en O(n³) et gérer correctement les doublons à chaque niveau ?

Réinitialiser le code
def threeSum(nums):
    # Écrivez le code ici
Cas de test

Cas 1

Cas 2

Entrée

nums = [-2, 0, 1, 1, -1, 2]

Attendu

[[-2, 0, 2], [-2, 1, 1], [-1, 0, 1]]