Menu
CoddyTech

3Sum

Otrzymujesz listę liczb całkowitych nums. Znajdź każdą trójkę [a, b, c] wartości pobranych z trzech różnych pozycji w nums, dla których a + b + c = 0. Zapisz każdą trójkę w kolejności niemalejącej (a ≤ b ≤ c) i uwzględnij każdą różną trójkę tylko raz, nawet jeśli powstaje ona przy kilku wyborach pozycji. Zwróć trójki posortowane według pierwszej wartości, a następnie drugiej.

Funkcja

threeSum(nums: integer-array) → integer-2d-array
numsinteger-array
lista liczb całkowitych zawierająca co najmniej trzy elementy
Zwracainteger-2d-array
każda odrębna trójka, której suma wynosi 0, każda uporządkowana niemalejąco, a lista posortowana

Ograniczenia

  • 3 ≤ nums.length ≤ 3000
  • -105 ≤ nums[i] ≤ 105
  • Co najmniej jedna trójka sumuje się do 0.
  • Dwie trójki są takie same, gdy zawierają te same trzy wartości.

Przykłady

Wejście
nums = [-2, 0, 1, 1, -1, 2]
Wyjście
[[-2, 0, 2], [-2, 1, 1], [-1, 0, 1]]
Wyjaśnienie
-2 + 0 + 2, -2 + 1 + 1 oraz -1 + 0 + 1 dają 0. [-2, 1, 1] może używać wartości 1 dwa razy, ponieważ 1 występuje na dwóch pozycjach, podczas gdy [-1, 0, 1] można utworzyć z użyciem dowolnej z dwóch jedynek, ale pojawia się tylko raz.

lock icon+15 ukrytych testów przy wysłaniu

challenge icon

Pytanie dodatkowe

Ten sam wzorzec rozwiązuje problem 4Sum: ustal dwie wartości i użyj dwóch wskaźników dla pozostałych. Czy potrafisz napisać to w O(n³) i poprawnie obsłużyć duplikaty na każdym poziomie?

Zresetuj kod
def threeSum(nums):
    # Napisz tutaj kod
Przypadki testowe

Przypadek 1

Przypadek 2

Wejście

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

Oczekiwane

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