アルゴリズム - 3Sum

3Sum

Q:

 n個の整数の配列NUMS与えられ、要素は、+ B + C = 0というNUMS中、B、Cがありますか?ゼロの合計を与え、アレイ内のすべてのユニークなトリプレットを検索します。

注意:

ソリューション・セットは、重複三つ子を含めることはできません。

例:

所与のアレイ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 
}

        
        

  

 

おすすめ

転載: www.cnblogs.com/bbcfive/p/11100679.html