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