インタビューの質問57 - 。IIと連続した正のシーケンスの個数

トピック:

 

正の整数を入力して  target 、すべての出力のための  target 連続的な正の整数の配列(少なくとも2つの数値を含みます)。

昇順で番号が最初の数字に応じて異なる配列の昇順に配列されています。

 

回答:

方法1:

嘆き逃げるために暴力

クラス解決{
 パブリック
    ベクトル <ベクトル< INT >> findContinuousSequence(int型のターゲット){ 
        ベクトル <ベクトル< INT >> RES。
        ベクトル < int型 > CUR。
        INT iはターゲット/ = 2 + 1 ; (I)*(I + 1)> = 2 *目標; - I){
             int型、P =ターゲット、J = Iと、
            一方、(P> 0とP> = J){ 
                P- = J;
                - J; 
            } 
            もし(P == 0 ){
                 ためのint型 K = J + 1、K <= I; ++ K){ 
                    cur.emplace_back(K)。
                } 
                res.emplace_back(ムーブ(CUR))。
            } 
        } 
        (res.begin()、res.end())逆。
        リターンのres; 
    } 
}。

方法2:

それはかなり明らかにスライディングウィンドウを使用し、連続した数字であるとするので、ウィンドウをスライディング。この点を気づくことができるメッセージは時に質問を行うべきです。O()︿))Oああ

クラス解決{
 パブリック
    ベクトル <ベクトル< INT >> findContinuousSequence(int型のターゲット){ 
        ベクトル <ベクトル< INT >> RES。
        int型ル= 1、RI = 1、cur_sum = 0 ;
        一方、(RI <ターゲット/ 2 + 3 ){
             一方(cur_sum < ターゲット){ 
                cur_sum + = RI ++ 
            } 
            であれば(cur_sum == ターゲット){ 
                res.push_back({})。
                にとってINT I =ル; I <RI; ++ i)が{ 
                    。res.back()はemplace_back(I)。
                } 
                cur_sum + = RI ++ 
            } 
             { // > 
                一方(cur_sum> ターゲット){ 
                    cur_sum - =ル++ 
                } 
            } 
        } 
        戻りRES。
    } 
}。

 

おすすめ

転載: www.cnblogs.com/FdWzy/p/12430350.html
おすすめ