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