Menu
CoddyTech

3Sum

Se te proporciona una lista de números enteros nums. Encuentra cada triplete [a, b, c] de valores tomados de tres posiciones distintas de nums que cumpla a + b + c = 0. Escribe cada triplete en orden no decreciente (a ≤ b ≤ c) y enumera cada triplete distinto una sola vez, incluso cuando varias elecciones de posiciones lo produzcan. Devuelve los tripletes ordenados por su primer valor y, después, por el segundo.

Función

threeSum(nums: integer-array) → integer-2d-array
numsinteger-array
la lista de números enteros, con al menos tres elementos
Devuelveinteger-2d-array
cada tripleta distinta que suma 0, cada una en orden no decreciente, la lista ordenada

Restricciones

  • 3 ≤ nums.length ≤ 3000
  • -105 ≤ nums[i] ≤ 105
  • Al menos una terna suma 0.
  • Dos ternas son iguales cuando contienen los mismos tres valores.

Ejemplos

Entrada
nums = [-2, 0, 1, 1, -1, 2]
Salida
[[-2, 0, 2], [-2, 1, 1], [-1, 0, 1]]
Explicación
-2 + 0 + 2, -2 + 1 + 1 y -1 + 0 + 1 dan como resultado 0. [-2, 1, 1] puede usar el valor 1 dos veces porque 1 ocupa dos posiciones, mientras que [-1, 0, 1] puede construirse con cualquiera de los dos valores 1, pero aparece una sola vez.

lock icon+15 pruebas ocultas al enviar

challenge icon

Para ir más allá

El mismo patrón resuelve 4Sum: fija dos valores y usa dos punteros con el resto. ¿Puedes escribirlo en O(n³) y aplicar correctamente las reglas para evitar duplicados en cada nivel?

Restablecer código
def threeSum(nums):
    # Escribe el código aquí
Casos de prueba

Caso 1

Caso 2

Entrada

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

Esperado

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