安全プランを証明する[41] - 連続して正のシーケンスS

タイトル説明

暁明は、彼が計算するのに必要と9〜16は、彼はすぐに正しい答えは100で書いた、数学の宿題をやっていた、数学、1日の非常に好きです。しかし、彼はこれで満足していなかった、彼は連続正数列の多くの種類が100(少なくとも二つの数字を含む)であるか疑問に思いました。18,19,20,21,22:長い前に、彼は連続した正の数と100のシーケンスの別のセットを得ました。今、あなたの質問は、あなたもすぐにすべての正と連続したシーケンスS?幸運を識別することができます!

出力説明

输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序

この質問は、我々は配列を初期化、動的プログラミングアルゴリズムのアイデアを使用することができ、配列がより小さくされsum、我々は、ユニークなソートの正の数配列二つのポインタを作成leftするright0のポイントして、新しい変数の作成countからレコードをleft指すポインタrightそして、ポインタの配列。その後、起動whileサイクルをそれぞれ比較count有するsum場合、サイズをcount小さくそれでは、right++;場合count大きな、それを作るだろうleft--、それは等しくなり、leftへのポインタrightへのポインタの配列res真ん中。サイクル・リターンの終わりresに。

function FindContinuousSequence(sum)
{
    let i = 1;
    let temp = new Array(sum-1).fill(1).map(x=>i++)
    let res = [];
    let left = 0;
    let right = 0;
    let count = 0;
    while(right!=sum){
        if(count<sum){
            count += temp[right];
            right++;
        }
        else if(count==sum){
            res.push(temp.slice(left, right));
            count -= temp[left];
            left++;
        }else{
            count -= temp[left];
            left++;
        }
    }
    return res;
}

おすすめ

転載: www.cnblogs.com/Jacob98/p/12580355.html