Menu
CoddyTech

3Sum

整数のリスト nums が与えられます。nums の異なる3つの位置から選んだ値の組で、a + b + c = 0 を満たすすべての三つ組 [a, b, c] を見つけてください。各三つ組を非減少順(a ≤ b ≤ c)に並べ、位置の選び方が複数あっても、異なる三つ組はそれぞれ1回だけ列挙してください。三つ組を最初の値、次に2番目の値の順に並べて返してください。

関数

threeSum(nums: integer-array) → integer-2d-array
numsinteger-array
少なくとも3つの要素を含む整数のリスト
戻り値integer-2d-array
合計が0になる、それぞれの異なる3つ組を、各組を非減少順に並べ、リスト全体もソートする

制約

  • 3 ≤ nums.length ≤ 3000
  • -105 ≤ nums[i] ≤ 105
  • 少なくとも1つの三つ組の合計は0になります。
  • 2つの三つ組は、同じ3つの値を持つとき、同じです。

例

入力
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 になります。1 は 2 つの位置にあるため、[-2, 1, 1] では値 1 を 2 回使えますが、[-1, 0, 1] はどちらの 1 を使っても作れ、1 回だけ現れます。

lock icon提出時に隠しテスト+15件

challenge icon

発展問題

同じパターンで4Sumを解けます。2つの値を固定し、残りの要素に対して2つのポインターを使います。O(n³)で実装し、すべての段階で重複の処理を正しく行えますか?

コードをリセット
def threeSum(nums):
    # ここにコードを書いてください
テストケース

ケース1

ケース2

入力

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

期待値

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