import java.util.ArrayList;
public class Solution {
    public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) {
        int p1=1,p2=2;
        ArrayList<ArrayList<Integer>> res = new ArrayList<>();
        if(sum <= 1) return res;
       
        while(p1 != sum/2+1 && p2!=sum){
            int tmp  = (p1+p2)*(p2-p1+1)/2; // 求和公式
            if(tmp == sum){
                ArrayList<Integer> list = new ArrayList<>();
                for(int i=p1;i<=p2;i++) list.add(i);
                res.add(list);
                p2++;
            }else if(tmp < sum){
                p2++;
            }else {
                p1++;
            }
        }
        return res;
    }
}
第一种方法可以使用暴力枚举;
第二种方法可以采用这里的滑动窗口法。
滑动窗口维持一个上沿和一个下沿:
1. 如果当前滑动窗口内的值大于sum,窗口收缩,下沿上移;
2. 如果当前窗口内的值小于sum,窗口扩张,上沿上移;