使用双指针技术,就是相当于有一个窗口,窗口的左右两边就是两个指针,根据窗口内值之和来确定窗口的位置和宽度。
import java.util.ArrayList;
public class Solution {
public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) {
ArrayList<ArrayList<Integer> > result = new ArrayList<>();
//定义序列内最大数与最小数
int small = 1,big = 2;
while(big > small){
//由于是连续正数序列,所以序列的和为(small + big) * (big - small + 1) / 2
int temp = (small + big) * (big - small + 1) / 2;
if(temp == sum){
ArrayList<Integer> list = new ArrayList<>();
for(int i = small; i <= big; i++){
list.add(i);
}
result.add(list);
//取得一个序列之后,左窗口右移,开始找下一个序列
small++;
}
else if(temp < sum){
big++;
}
else {
small++;
}
}
return result;
}
}