思路:
双指针技术:相当于有一个窗口,窗口的左右两边就是两个指针,根据指针内值的和来确定窗口的位置和宽度。
具体方法是直接创建两个数,先求这两个数之间的和,如果这两个数之间的和大于目标数,就让窗口左侧的数自加(缩短窗口),相反如果和小于目标数,就让窗口右侧的数自加(扩充窗口),直到相等则把窗口中的数都加入一个list,再把list加入result,完成后还要把窗口左侧向右移动一格,为了避免重复统计。
实现:
import java.util.ArrayList;
public class Solution {
public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) {
ArrayList<ArrayList<Integer> > result = new ArrayList<>();
int plow = 1 , phigh = 2;
while(phigh > plow){
int cur = (plow + phigh) * (phigh - plow + 1) / 2;
if(cur == sum){
ArrayList<Integer> list = new ArrayList<>();
for(int i = plow ; i <= phigh; i++){
list.add(i);
}
result.add(list);
plow++;
}
else if(cur < sum){
phigh++;
}
else if(cur > sum){
plow++;
}
}
return result;
}
}