Menu
CoddyTech

4Sum

On vous donne une liste d’entiers nums et un entier target. Renvoyez tous les quadruplets [a, b, c, d] dont les quatre valeurs se trouvent à quatre positions différentes de nums et dont la somme est égale à target. Écrivez chaque quadruplet avec ses valeurs dans l’ordre non décroissant. Si les mêmes quatre valeurs peuvent être choisies à partir de positions différentes, le quadruplet n’apparaît qu’une seule fois. Triez la réponse d’abord par première valeur, puis par deuxième, puis par troisième. Si aucun quadruplet ne convient, renvoyez une liste vide.

Fonction

fourSum(nums: integer-array, target: integer) → integer-2d-array
numsinteger-array
les nombres parmi lesquels choisir, au moins un
targetinteger
la somme que chaque quadruplet doit atteindre
Renvoieinteger-2d-array
les quadruplets distincts dont la somme est target, chacun trié, la liste étant également triée ; une liste vide s'il n'y en a aucun

Contraintes

  • 1 ≤ nums.length ≤ 200
  • -108 ≤ nums[i] ≤ 108
  • -109 ≤ target ≤ 109
  • La somme de quatre valeurs quelconques est comprise entre -4 × 108 et 4 × 108, elle tient donc dans un entier de 32 bits.
  • Les quadruplets qui contiennent les mêmes quatre valeurs comptent comme un seul.

Exemples

Entrée
nums = [3, -1, 0, 2, -2, 1, -3]target = 1
Sortie
[[-3, -1, 2, 3], [-3, 0, 1, 3], [-2, -1, 1, 3], [-2, 0, 1, 2]]
Explication
Chacun des quatre quadruplets a une somme égale à 1, par exemple -3 + (-1) + 2 + 3. Ceux qui commencent par -3 viennent en premier, classés selon leur deuxième valeur : -1 avant 0.
challenge icon

Pour aller plus loin

Compte les ensembles de quatre positions dont les valeurs s’additionnent pour atteindre target, plutôt que les quadruplets distincts. Le deuxième exemple en compte 15. Peux-tu le faire en O(n²) ?

Réinitialiser le code
def fourSum(nums, target):
    # Écrivez le code ici

Test #1

Test #2

Test #3

Arguments

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

Résultat attendu

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