leetcode18 4とのダブルポインタの数

余談:

この質問はのことを思い出します

課題は、+ B + C + D =ターゲットのように、番号を再利用することができ、宝くじコンテストプログラミングの問題を抱えています。

+ B =ターゲットCDに+ B + C + D =ターゲット。唯一存在するか否かを判定した場合、それはすべてのC + Dの値は、その後binary_searchを得るために前処理することができる(標的-AB)

治療

アレイのn個の数の合計で、INT(株)のアレイを準備

KK [C * N + D] = K [C] + K [D]。

Oの複雑さ(N ^ 2log(N))

 この質問は次のようになります。

そして、ほとんどの最初の二つの質問、最初の固定された2つの数字、そして二重の指に

 

クラス解決{
 パブリック
    ベクトル <ベクトル< INT >> fourSum(ベクトル< INT >&NUMS、int型のターゲット){ 
        ベクトル <ベクトル< INT >> RET。
        もし(nums.empty())
             リターンRET;
        INT LEN = nums.size()。
        もし(LEN < 4 リターンRET。
        ソート(nums.begin()、nums.end()); 
        以下のためにint型 i = 0 ; iは<LEN - 3 ; iは++ ){
            もし(I> 0 && NUMS [I] == NUMS [iが- 1 ]) 
                 続けます以下のためにint型 J = I + 1、J <len- 2 ; J ++ ){
                 場合(NUMS [J] == NUMS [J- 1 ] &&(jは> I + 1 ))
                     続けますint型 L = J + 1 INT R = LEN - 1 一方(L <R){ // 多组
                INT S = NUMS [I] + NUMS [L] + NUMS [R] + NUMS [J]。
                場合(S> ターゲット)
                    R - それ以外の 場合(S < ターゲット)
                    L ++ ;
                { 
                    ret.push_back({NUMS [i]は、NUMS [J]、NUMS [L]、NUMS [R]})。
                    一方、(L <R && NUMS [L] == NUMS [++ L])。
                    一方、(L <R && NUMS [R] == NUMS [ - R])。
                    } 
                } 
            } 
        } 
        戻りRET。
    } 
}。

 

おすすめ

転載: www.cnblogs.com/lqerio/p/11759402.html
おすすめ