Menu
CoddyTech

3Sum

Дан список целых чисел nums. Найдите все тройки [a, b, c] значений, взятых из трёх разных позиций списка nums, для которых a + b + c = 0. Запишите каждую тройку в неубывающем порядке (a ≤ b ≤ c) и укажите каждую уникальную тройку только один раз, даже если её можно получить, выбрав разные позиции. Верните тройки, отсортированные сначала по первому значению, а затем по второму.

Функция

threeSum(nums: integer-array) → integer-2d-array
numsinteger-array
список целых чисел, содержащий не менее трёх элементов
Возвращаетinteger-2d-array
каждая уникальная тройка чисел, сумма которых равна 0, отсортированная в неубывающем порядке; список отсортирован

Ограничения

  • 3 ≤ nums.length ≤ 3000
  • -105 ≤ nums[i] ≤ 105
  • Как минимум одна тройка в сумме дает 0.
  • Две тройки одинаковы, если содержат одни и те же три значения.

Примеры

Ввод
nums = [-2, 0, 1, 1, -1, 2]
Вывод
[[-2, 0, 2], [-2, 1, 1], [-1, 0, 1]]
Пояснение
-2 + 0 + 2, -2 + 1 + 1 и -1 + 0 + 1 дают 0. [-2, 1, 1] может использовать значение 1 дважды, поскольку число 1 стоит на двух позициях, а [-1, 0, 1] можно составить с любым из этих чисел 1, но оно встречается один раз.

lock icon+15 скрытых тестов при отправке

challenge icon

Дополнительный вопрос

Тот же шаблон решает задачу 4Sum: зафиксируй два значения и запусти два указателя по остальным. Сможешь написать решение за O(n³) и правильно обработать дубликаты на каждом уровне?

Сбросить код
def threeSum(nums):
    # Напишите код здесь
Тестовые случаи

Случай 1

Случай 2

Ввод

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

Ожидается

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