トピック:
正の整数を入力して 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。 } }。