Menu
CoddyTech

3Sum

Ti viene fornito un elenco di numeri interi nums. Trova tutte le triplette [a, b, c] di valori presi da tre posizioni diverse di nums tali che a + b + c = 0. Scrivi ogni tripletta in ordine non decrescente (a ≤ b ≤ c) ed elenca ogni tripletta distinta una sola volta, anche quando diverse combinazioni di posizioni la producono. Restituisci le triplette ordinate in base al primo valore e poi al secondo.

Funzione

threeSum(nums: integer-array) → integer-2d-array
numsinteger-array
l'elenco di numeri interi, con almeno tre elementi
Restituisceinteger-2d-array
ogni terna distinta la cui somma è 0, ciascuna in ordine non decrescente, l’elenco ordinato

Vincoli

  • 3 ≤ nums.length ≤ 3000
  • -105 ≤ nums[i] ≤ 105
  • Almeno una terna ha somma pari a 0.
  • Due triplette sono uguali quando contengono gli stessi tre valori.

Esempi

Input
nums = [-2, 0, 1, 1, -1, 2]
Output
[[-2, 0, 2], [-2, 1, 1], [-1, 0, 1]]
Spiegazione
-2 + 0 + 2, -2 + 1 + 1 e -1 + 0 + 1 danno tutti 0. [-2, 1, 1] può usare il valore 1 due volte perché 1 si trova in due posizioni, mentre [-1, 0, 1] può essere composto usando uno dei due 1, ma compare una sola volta.

lock icon+15 test nascosti all’invio

challenge icon

Per approfondire

Lo stesso schema risolve 4Sum: fissa due valori e usa due puntatori sul resto. Riesci a scriverlo in O(n³) e a gestire correttamente i duplicati a ogni livello?

Ripristina il codice
def threeSum(nums):
    # Scrivi il codice qui
Casi di test

Caso 1

Caso 2

Input

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

Atteso

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