Menu
CoddyTech

3Sum

Você recebe uma lista de números inteiros nums. Encontre cada trinca [a, b, c] de valores obtidos de três posições diferentes de nums, de modo que a + b + c = 0. Escreva cada trinca em ordem não decrescente (a ≤ b ≤ c) e liste cada trinca distinta uma única vez, mesmo quando várias escolhas de posições a produzirem. Retorne as trincas ordenadas pelo primeiro valor e, em seguida, pelo segundo.

Função

threeSum(nums: integer-array) → integer-2d-array
numsinteger-array
a lista de números inteiros, com pelo menos três elementos
Retornainteger-2d-array
cada trio distinto cuja soma seja 0, cada um em ordem não decrescente, a lista ordenada

Restrições

  • 3 ≤ nums.length ≤ 3000
  • -105 ≤ nums[i] ≤ 105
  • Pelo menos uma trinca soma 0.
  • Dois trios são iguais quando contêm os mesmos três valores.

Exemplos

Entrada
nums = [-2, 0, 1, 1, -1, 2]
Saída
[[-2, 0, 2], [-2, 1, 1], [-1, 0, 1]]
Explicação
-2 + 0 + 2, -2 + 1 + 1 e -1 + 0 + 1 resultam em 0. [-2, 1, 1] pode usar o valor 1 duas vezes porque 1 está em duas posições, enquanto [-1, 0, 1] pode ser formado usando qualquer um dos valores 1, mas aparece uma vez.

lock icon+15 testes ocultos ao enviar

challenge icon

Para ir além

O mesmo padrão resolve o 4Sum: fixe dois valores e use dois ponteiros no restante. Você consegue escrevê-lo em O(n³) e manter as regras para duplicatas corretas em todos os níveis?

Redefinir código
def threeSum(nums):
    # Escreva o código aqui
Casos de teste

Caso 1

Caso 2

Entrada

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

Esperado

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