タイトル説明
暁明は、彼が計算するのに必要と9〜16は、彼はすぐに正しい答えは100で書いた、数学の宿題をやっていた、数学、1日の非常に好きです。しかし、彼はこれで満足していなかった、彼は連続正数列の多くの種類が100(少なくとも二つの数字を含む)であるか疑問に思いました。18,19,20,21,22:長い前に、彼は連続した正の数と100のシーケンスの別のセットを得ました。今、あなたの質問は、あなたもすぐにすべての正と連続したシーケンスS?幸運を識別することができます!
出力説明:
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
この質問は、我々は配列を初期化、動的プログラミングアルゴリズムのアイデアを使用することができ、配列がより小さくされsum
、我々は、ユニークなソートの正の数配列二つのポインタを作成left
するright
0のポイントして、新しい変数の作成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;
}