尺取法:指对数组保存一对下标(起点,终点),然后根据实际情况交替推进两个端点知道得出答案的方法。

import java.util.ArrayList;

public class Solution {

    int maxn = 10000;

    public ArrayList<ArrayList<Integer>> FindContinuousSequence(int sum) {

        ArrayList<ArrayList<Integer>> lists = new ArrayList<ArrayList<Integer>>();
        int[] array = new int[maxn];
        for (int i = 1; i < maxn; i++) {
            array[i] = array[i - 1] + i;
        }

        int l = 0, r = 2; // 至少包括两个数
        while (l + 1 < r) {
            if (array[r] - array[l] == sum) {
                ArrayList<Integer> list = new ArrayList<Integer>();
                for (int i = l + 1; i <= r; i++) {
                    list.add(i);
                }
                lists.add(list);
                r++; // 或者 l++
            } else if (array[r] - array[l] > sum) {
                l++;
            } else {
                r++;
            }
        }
        return lists;
    }

}