和为s的连续正数序列


题目描述
小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!

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


思路:
因为要求连续的数列和,所以这是一个等差数列,并且我们想到用双指针来做,slow,high。
1.等差数列:current(当前值)=(high-slow+1)(high+slow)/2
2.初始化slow=1和high=2.(因为考虑要覆盖到所有情况,所以赋值为两个较小的数)
3.只要满足slow<high,循环就可进行。
4.不断地比较current和slow
4.1.current==slow,即slow和high之间的数满足序列要求,所以遍历slow和high之间的所有数,存入一个数组。*
之后slow++**(因为要求的所有的连续正数序列,所以要不断的右移)
图片说明
4.2.current<slow,则表明当前值小于sum,需要high++,
4.3.current>slow,则表明当前值大于sum,需要减小当前值,即slow--;


function FindContinuousSequence(sum)
{
    // write code here
    var result = [];
    var slow = 1;var high = 2;
    while(slow<high){
        current = (high-slow+1)*(high+slow)/2;
        if(current==sum){
            var list = [];
            for(let i =slow;i<=high;i++){
                list.push(i);
            }
            result.push(list);
            slow++;
        }else if(current<sum){
            high++;
        }else{
            slow++
        }
    }
    return result;
}