3Sum
Q:
n個の整数の配列NUMS与えられ、要素は、+ B + C = 0というNUMS中、B、Cがありますか?ゼロの合計を与え、アレイ内のすべてのユニークなトリプレットを検索します。
注意:
ソリューション・セットは、重複三つ子を含めることはできません。
例:
所与のアレイNUMSの= [-1、0、1、2、-1、-4]、
解集合である:
[
[-1、0、1]、
[-1、-1、2]
]
注意:
ソリューション・セットは、重複三つ子を含めることはできません。
例:
所与のアレイNUMSの= [-1、0、1、2、-1、-4]、
解集合である:
[
[-1、0、1]、
[-1、-1、2]
]
:
/ * * * 3Sum *三数之和 * / // 複雑:O(N ^ 2) / * * * @param {数[]} NUMS * @return {数[] []} * / VAR threeSum = 関数(NUMS){ nums.sort((A、B) => - B) ANSせ = [] せLEN = nums.length // 配列を列挙し、最小のものであることがアイテムを取る ための(Iしましょう= 0; iがLEN <; Iは++ ){ //は既に3のうち最小のものとしてアイテムを列挙している // 続行し た場合(I && NUMS [I] === NUMS [I - 1])継続 // 他の両者の和がなければならない -ターゲット=せNUMS [I] // 別の2のインデックスは 聞かせて、[開始、終了] = [ I + 1、LEN - 1 ] ながら(開始< {端)を 加算させ = NUMS [開始] + NUMSを[終了] もし(合計> ターゲット){ エンド - } そう であれば(合計< ターゲット){ 起動 ++ } 他{ ans.push([NUMS [i]は、NUMS []スタート、NUMS [END]]) // は、重複を削除します ながら(NUMS [スタート] === NUMS [1 +スタート]) 開始 ++ 開始 ++ // 重複を除去しながら - (NUMS [終了] === NUMS [1端]) エンド - エンド - } } } 戻りANS }