/**
* 使用滑动窗口技术, 定义两个指针, 每次计算指针所在窗口中的元素和, 然后与宿sum,
* 对比。根据对比的结果在 移动两个指针
*
* @param sum
* @return
*/
public static ArrayList<ArrayList<Integer>> FindContinuousSequence(int sum) {
ArrayList<ArrayList<Integer>> ans = new ArrayList<ArrayList<Integer>>();
int fast = 2;
int slow = 1;
/*
当 slow 追上 fast的时候就找不到正确答案了
*/
while (fast > slow) {
int cnt = (fast + slow) * (fast - slow + 1) / 2;
/**
*是答案
*/
if (cnt == sum) {
ArrayList<Integer> list = new ArrayList<>();
for (int i = slow; i <= fast; i++) {
list.add(i);
}
ans.add(list);
slow++;
} else if (cnt < sum) {
fast++;
} else {
slow++;
}
}
return ans;
}
剑指offer 41
最新推荐文章于 2020-12-09 10:06:46 发布